home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / playdemo.s < prev    next >
Text File  |  1997-01-31  |  104KB  |  7,106 lines

  1. maxscrdiv EQU 8
  2. max3ddiv EQU 5
  3. playerheight EQU 12*1024
  4. scrheight EQU 80
  5.  
  6. ; k/j/m
  7. ; 4/8
  8. ; s/x
  9. ; b/n
  10.  
  11.  
  12. xpos EQU 0    ;l
  13. zpos EQU 4    ;l
  14. zsinval EQU 8    ;w
  15. zcosval EQU 10    ;w
  16. ztox EQU 12    ;l
  17. xsinval EQU 16    ;w
  18. xcosval EQU 18    ;w
  19. xspd EQU 20    ;w
  20. zspd EQU 22    ;w
  21. mapx EQU 24    ;b
  22. mapz EQU 25    ;b
  23. whichtile EQU 26 ;b
  24. xofflight EQU 28    ;w
  25. zofflight EQU 30    ;w
  26. offlight EQU 32        ;w
  27. zlinestore EQU 34
  28. zlinedir EQU 38
  29. zposdir EQU 40
  30. zposstore EQU 42
  31. xdiststore EQU 44
  32. xdistdir EQU 46
  33. zwallfound EQU 48
  34.  
  35. xlinestore EQU 50
  36. xlinedir EQU 54
  37. xposdir EQU 56
  38. xposstore EQU 58
  39. zdiststore EQU 60
  40. zdistdir EQU 62
  41. xwallfound EQU 64
  42.  
  43.  
  44. midoffset EQU 104*4*40
  45.  
  46.  SECTION Scrn,CODE 
  47. OpenLib         equ -552
  48. CloseLib        equ -414
  49.  
  50. vhposr        equ $006    
  51. vhposrl        equ $007 
  52. bltcon0        equ $40 
  53. bltcon1        equ $42
  54. bltcpt        equ $48
  55. bltbpt        equ $4c
  56. bltapt        equ $50
  57. spr0ctl        equ $142
  58. spr1ctl        equ $14a
  59. spr2ctl        equ $152
  60. spr3ctl        equ $15a
  61. spr4ctl        equ $162
  62. spr5ctl        equ $16a
  63. spr6ctl        equ $172
  64. spr7ctl        equ $17a
  65. spr0pos        equ $140
  66. spr1pos        equ $148
  67. spr2pos        equ $150
  68. spr3pos        equ $158
  69. spr4pos        equ $160
  70. spr5pos        equ $168
  71. spr6pos        equ $170
  72. spr7pos        equ $178
  73. bltdpt         equ $54
  74. bltafwm        equ $44
  75. bltalwm        equ $46
  76. bltsize         equ $58
  77. bltcmod         equ $60
  78. bltbmod         equ $62
  79. bltamod         equ $64
  80. bltdmod         equ $66
  81. diwstart        equ $8e         ; Screen hardware registers.
  82. diwstop         equ $90
  83. ddfstart        equ $92
  84. ddfstop         equ $94
  85. bplcon0         equ $100
  86. bplcon1         equ $102
  87. col0            equ $180
  88. col1            equ $182
  89. col2        equ $184
  90. col3        equ $186
  91. col4        equ $188
  92. col5        equ $18a
  93. col6        equ $18c
  94. col7        equ $18e
  95. col8            equ $190
  96. col9            equ $192
  97. col10           equ $194
  98. dmacon        equ $96
  99. dmaconr        equ $002
  100. intenar        equ $01c
  101. intena        equ $09a
  102. intreq        equ $09c
  103. intreqr        equ $01e
  104. intreqrl    equ $01f
  105. bpl1pth         equ $e0
  106. bpl1ptl         equ $e2
  107. bpl2pth        equ $e4
  108. bpl2ptl        equ $e6
  109. bpl3pth        equ $e8
  110. bpl3ptl        equ $ea
  111. bpl4pth        equ $ec
  112. bpl4ptl        equ $ee
  113. bpl5pth        equ $f0
  114. bpl5ptl        equ $f2
  115. bpl6pth        equ $f4
  116. bpl6ptl        equ $f6
  117. bpl7pth        equ $f8
  118. bpl7ptl        equ $fa
  119. bpl8pth        equ $fc
  120. bpl8ptl        equ $fe
  121. spr0pth        equ $120
  122. spr0ptl        equ $122
  123. spr1pth        equ $124
  124. spr1ptl        equ $126
  125. spr2pth        equ $128
  126. spr2ptl        equ $12a
  127. spr3pth        equ $12c
  128. spr3ptl        equ $12e
  129. spr4pth        equ $130
  130. spr4ptl        equ $132
  131. spr5pth        equ $134
  132. spr5ptl        equ $136
  133. spr6pth        equ $138
  134. spr6ptl        equ $13a
  135. spr7pth        equ $13c
  136. spr7ptl        equ $13e
  137.  
  138.  
  139. ** This waits for the blitter to finish before allowing program
  140. ** execution to continue.
  141.  
  142. WB MACRO
  143. \@bf:
  144.  btst #6,dmaconr(a6)
  145.  bne.s \@bf
  146.  ENDM
  147.  
  148. *Another version for when d6 <> dff000
  149.  
  150. WBSLOW MACRO
  151. \@bf:
  152.  btst #6,$dff000+dmaconr
  153.  bne.s \@bf
  154.  ENDM
  155.  
  156.  
  157. **
  158.  
  159.  include "macros.i"
  160.  include "ab3:source/defs.i"
  161.  
  162.  
  163. * Load level into buffers.
  164.  move.l 4.w,a6
  165.  move.l #doslibname,a1
  166.  moveq #0,d0
  167.  jsr -552(a6)
  168.  move.l d0,doslib
  169.  
  170.  bra noload
  171.  
  172.  move.l d0,a6
  173.  move.l #LDname,d1
  174.  move.l #1005,d2
  175.  jsr -30(a6)
  176.  move.l d0,LDhandle
  177.  
  178.  move.l doslib,a6
  179.  move.l d0,d1
  180.  move.l #LEVELDATA,d2
  181.  move.l #70000,d3
  182.  jsr -42(a6)
  183.  
  184.  move.l doslib,a6
  185.  move.l LDhandle,d1
  186.  jsr -36(a6)
  187.  
  188. ********
  189.  
  190.  move.l doslib,a6
  191.  move.l #LGname,d1
  192.  move.l #1005,d2
  193.  jsr -30(a6)
  194.  move.l d0,LGhandle
  195.  
  196.  move.l doslib,a6
  197.  move.l d0,d1
  198.  move.l #LEVELGRAPHICS,d2
  199.  move.l #25000,d3
  200.  jsr -42(a6)
  201.  
  202.  move.l doslib,a6
  203.  move.l LGhandle,d1
  204.  jsr -36(a6)
  205.  
  206. ********
  207.  
  208.  move.l doslib,a6
  209.  move.l #LCname,d1
  210.  move.l #1005,d2
  211.  jsr -30(a6)
  212.  move.l d0,LChandle
  213.  
  214.  move.l doslib,a6
  215.  move.l d0,d1
  216.  move.l #LEVELCLIPS,d2
  217.  move.l #50000,d3
  218.  jsr -42(a6)
  219.  
  220.  move.l doslib,a6
  221.  move.l LChandle,d1
  222.  jsr -36(a6)
  223.  
  224. *******
  225.  
  226. noload:
  227.  
  228. ********
  229.  
  230. ; move.l doslib,a6
  231. ; move.l #Prefsname,d1
  232. ; move.l #1005,d2
  233. ; jsr -30(a6)
  234. ; move.l d0,Prefshandle
  235.  
  236. ; move.l doslib,a6
  237. ; move.l d0,d1
  238. ; move.l #Prefsfile,d2
  239. ; move.l #50,d3
  240. ; jsr -42(a6)
  241.  
  242. ; move.l doslib,a6
  243. ; move.l Prefshandle,d1
  244. ; jsr -36(a6)
  245.  
  246. *******
  247.  
  248.  cmp.b #'s',Prefsfile+2
  249.  seq STEREO
  250.  
  251.  move.l doslib,d0
  252.  move.l d0,a1
  253.  move.l 4.w,a6
  254.  jsr CloseLib(a6)
  255.  
  256.  
  257.  jmp stuff
  258. endstuff:
  259.  
  260.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  261.  move.w #$87c0,dmacon(a6)
  262.  move.w #$8020,dmacon(a6)
  263.  move.w intenar(a6),saveinters
  264.  move.w #$7fff,intena(a6)
  265.  move.w #$00ff,$dff09e
  266.  
  267. *** Put myself in supervisor mode
  268.  
  269.  move.l #blag,$80
  270.  trap #0
  271. ; move.l $6c,d0
  272. ; move.l #blag,$6c
  273. ; move.w #$8010,intreq(a6)
  274.  
  275.  rts
  276.  
  277. saveit: ds.l 10
  278. doslibname: dc.b 'dos.library',0
  279.  even
  280. doslib: dc.l 0
  281.  
  282. LDname: dc.b 'ab3:includes/tstlev.bin',0
  283.  even
  284. LDhandle: dc.l 0
  285. LGname: dc.b 'ab3:includes/tstlev.graph.bin',0
  286.  even
  287. LGhandle: dc.l 0
  288. LCname: dc.b 'ab3:includes/tstlev.clips',0
  289.  even
  290. LChandle: dc.l 0
  291.  
  292. Prefsname: dc.b 'ram:prefs',0
  293.  even
  294. Prefshandle: dc.l 0
  295.  
  296. Prefsfile:
  297.  dc.b 'k4nx'
  298.  ds.b 50
  299.  
  300. blag:
  301. ; move.w #$10,intreq(a6)
  302. ; move.l d0,$6c
  303. ; move.w #$7fff,intena(a6)
  304.  
  305.  move.w #$20,$dff1dc
  306.  
  307.  move.l $6c,saveit
  308.  move.l #Chan0inter,$6c
  309.  jsr KInt_Init
  310.  
  311.  
  312.  
  313. ****************************
  314. * Initialize level
  315. ****************************
  316. * Poke all clip offsets into
  317. * correct bit of level data.
  318. ****************************
  319.  lea.l LEVELGRAPHICS,a0
  320.  move.l 12(a0),a1
  321.  add.l a0,a1
  322.  move.l a1,ZoneGraphAdds
  323.  move.l (a0),a1
  324.  add.l a0,a1
  325.  move.l a1,DoorData
  326.  move.l 4(a0),a1
  327.  add.l a0,a1
  328.  move.l a1,LiftData
  329.  move.l 8(a0),a1
  330.  add.l a0,a1
  331.  move.l a1,SwitchData
  332.  adda.w #16,a0
  333.  move.l a0,ZoneAdds
  334.  
  335.  lea.l LEVELDATA,a1
  336.  move.l 16(a1),a2
  337.  add.l a1,a2
  338.  move.l a2,Points
  339.  move.l 20(a1),a2
  340.  add.l a1,a2
  341.  move.l a2,FloorLines
  342.  move.l 24(a1),a2
  343.  add.l a1,a2
  344.  move.l a2,ObjectData
  345.  move.l 28(a1),a2
  346.  add.l a1,a2
  347.  move.l a2,PlayerShotData
  348.  move.l 32(a1),a2
  349.  add.l a1,a2
  350.  move.l a2,NastyShotData
  351.  move.l 36(a1),a2
  352.  add.l a1,a2
  353.  move.l a2,ObjectPoints  
  354.  move.l 40(a1),a2
  355.  add.l a1,a2
  356.  move.l a2,PLR1_Obj
  357.  move.l 44(a1),a2
  358.  add.l a1,a2
  359.  move.l a2,PLR2_Obj
  360.  move.w 14(a1),NumObjectPoints
  361.  
  362. ; bra noclips
  363.   
  364.  lea.l LEVELCLIPS,a2
  365.  moveq #0,d0
  366.  move.w 10(a1),d7    ;numzones
  367. assignclips:
  368.  move.l (a0)+,a3
  369.  add.l a1,a3    ; pointer to a zone
  370.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  371. dowholezone:
  372.  tst.w (a3)
  373.  blt.s nomorethiszone
  374.  tst.w 2(a3)
  375.  blt.s thisonenull
  376.  
  377.  move.l d0,d1
  378.  asr.l #2,d1
  379.  move.w d1,2(a3)
  380.  
  381. findnextclip:
  382.  cmp.w #-2,(a2,d0.l)
  383.  beq.s foundnextclip
  384.  addq.l #4,d0
  385.  bra.s findnextclip
  386. foundnextclip
  387.  addq.l #4,d0
  388.  
  389. thisonenull:
  390.  addq #8,a3 
  391.  bra.s dowholezone
  392. nomorethiszone:
  393.  dbra d7,assignclips
  394.  
  395. noclips:
  396.  
  397. * Put in addresses of glowything
  398.  
  399.  move.l red_des,a0
  400.  move.w (a0),d0
  401.  addq #1,d0
  402.  muls #6,d0
  403.  lea 2(a0,d0.w),a1
  404.  move.l red_des+4,a0
  405.  move.l a1,(a0)
  406.  move.w #0,(a1)
  407.  
  408.  move.l yellow_des,a0
  409.  move.w (a0),d0
  410.  addq #1,d0
  411.  muls #6,d0
  412.  lea 2(a0,d0.w),a1
  413.  move.l yellow_des+4,a0
  414.  move.l a1,(a0)
  415.  move.w #0,(a1)
  416.  
  417.  move.l green_des,a0
  418.  move.w (a0),d0
  419.  addq #1,d0
  420.  muls #6,d0
  421.  lea 2(a0,d0.w),a1
  422.  move.l green_des+4,a0
  423.  move.l a1,(a0)
  424.  move.w #0,(a1)
  425.  
  426.  move.l blue_des,a0
  427.  move.w (a0),d0
  428.  addq #1,d0
  429.  muls #6,d0
  430.  lea 2(a0,d0.w),a1
  431.  move.l #protinit-750000,a6
  432.  move.l blue_des+4,a0
  433.  move.l a1,(a0)
  434.  move.w #0,(a1)
  435.  
  436.  
  437. ************************************
  438.  
  439.  cmp.b #'k',Prefsfile
  440.  bne.s nkb
  441.  st PLR1KEYS
  442.  clr.b PLR1PATH
  443.  clr.b PLR1MOUSE
  444.  clr.b PLR1JOY
  445. nkb:
  446.  cmp.b #'m',Prefsfile
  447.  bne.s nmc
  448.  clr.b PLR1KEYS
  449.  clr.b PLR1PATH
  450.  st PLR1MOUSE
  451.  clr.b PLR1JOY
  452. nmc:
  453.  cmp.b #'j',Prefsfile
  454.  bne.s njc
  455.  clr.b PLR1KEYS
  456.  clr.b PLR1PATH
  457.  clr.b PLR1MOUSE
  458.  st PLR1JOY
  459. njc:
  460.  
  461.  move.l #empty,pos1LEFT
  462.  move.l #empty,pos2LEFT
  463.  move.l #empty,pos1RIGHT
  464.  move.l #empty,pos2RIGHT
  465.  move.l #emptyend,Samp0endLEFT
  466.  move.l #emptyend,Samp1endLEFT
  467.  move.l #emptyend,Samp0endRIGHT
  468.  move.l #emptyend,Samp1endRIGHT
  469.  
  470.  move.l #nullspr,d0
  471.  move.w d0,s4l
  472.  move.w d0,s5l
  473.  move.w d0,s6l
  474.  move.w d0,s7l
  475.  swap d0
  476.  move.w d0,s4h
  477.  move.w d0,s5h
  478.  move.w d0,s6h
  479.  move.w d0,s7h 
  480.  
  481.  move.l #nullline,d0
  482.  move.w d0,n1l
  483.  swap d0
  484.  move.w d0,n1h
  485.  
  486.  move.l #Panel,d0
  487.  move.w d0,p1l
  488.  swap d0
  489.  move.w d0,p1h
  490.  move.l #Panel+40,d0
  491.  move.w d0,p2l
  492.  swap d0
  493.  move.w d0,p2h
  494.  move.l #Panel+40*2,d0
  495.  move.w d0,p3l
  496.  swap d0
  497.  move.w d0,p3h
  498.  move.l #Panel+40*3,d0
  499.  move.w d0,p4l
  500.  swap d0
  501.  move.w d0,p4h
  502.  move.l #Panel+40*4,d0
  503.  move.w d0,p5l
  504.  swap d0
  505.  move.w d0,p5h
  506.  move.l #Panel+40*5,d0
  507.  move.w d0,p6l
  508.  swap d0
  509.  move.w d0,p6h
  510.  move.l #Panel+40*6,d0
  511.  move.w d0,p7l
  512.  swap d0
  513.  move.w d0,p7h
  514.  move.l #Panel+40*7,d0
  515.  move.w d0,p8l
  516.  swap d0
  517.  move.w d0,p8h
  518.  
  519. *******************************
  520. * TIMER SCREEN SETUP
  521. ; move.l #TimerScr,d0
  522. ; move.w d0,p1l
  523. ; swap d0
  524. ; move.w d0,p1h
  525. ; move.w #$1201,Panelcon
  526.  
  527.  move.l #borders,d0
  528.  move.w d0,s0l
  529.  swap d0
  530.  move.w d0,s0h
  531.  move.l #borders+2592,d0
  532.  move.w d0,s1l
  533.  swap d0
  534.  move.w d0,s1h
  535.  move.l #borders+2592*2,d0
  536.  move.w d0,s2l
  537.  swap d0
  538.  move.w d0,s2h
  539.  move.l #borders+2592*3,d0
  540.  move.w d0,s3l
  541.  swap d0
  542.  move.w d0,s3h
  543.  
  544.  move.w #52*256+64,borders
  545.  move.w #212*256+0,borders+8
  546.  move.w #52*256+64,borders+2592
  547.  move.w #212*256+128,borders+8+2592
  548.  move.w #52*256+192,borders+2592*2
  549.  move.w #212*256+0,borders+8+2592*2
  550.  move.w #52*256+192,borders+2592*3
  551.  move.w #212*256+128,borders+8+2592*3
  552.  
  553.  move.l #FacePlace,d0
  554.  move.w d0,f1l
  555.  swap d0
  556.  move.w d0,f1h
  557.  move.l #FacePlace+32*24,d0
  558.  move.w d0,f2l
  559.  swap d0
  560.  move.w d0,f2h
  561.  move.l #FacePlace+32*24*2,d0
  562.  move.w d0,f3l
  563.  swap d0
  564.  move.w d0,f3h
  565.  move.l #FacePlace+32*24*3,d0
  566.  move.w d0,f4l
  567.  swap d0
  568.  move.w d0,f4h
  569.  move.l #FacePlace+32*24*4,d0
  570.  move.w d0,f5l
  571.  swap d0
  572.  move.w d0,f5h
  573.  
  574.  move.l #PanelCop,d0
  575.  move.w d0,pcl1
  576.  move.w d0,pcl2
  577.  swap d0
  578.  move.w d0,pch1
  579.  move.w d0,pch2
  580.  
  581.  move.l #bigfield,d0
  582.  move.w d0,ocl
  583.  swap d0
  584.  move.w d0,och
  585.  
  586.  bset.b #1,$bfe001
  587.  
  588.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  589.  move.w #$00ff,$dff09e
  590.  
  591. ; move.l #Blurbfield,$dff080
  592.  
  593.  move.w #0,d0
  594.  
  595.  move.l #scrn,d0
  596.  move.w d0,pl1l
  597.  swap d0
  598.  move.w d0,pl1h
  599.  
  600.  move.l #scrn+40,d0
  601.  move.w d0,pl2l
  602.  swap d0
  603.  move.w d0,pl2h
  604.  
  605.  move.l #scrn+80,d0
  606.  move.w d0,pl3l
  607.  swap d0
  608.  move.w d0,pl3h
  609.  
  610.  move.l #scrn+120,d0
  611.  move.w d0,pl4l
  612.  swap d0
  613.  move.w d0,pl4h
  614.  
  615.  move.l #scrn+160,d0
  616.  move.w d0,pl5l
  617.  swap d0
  618.  move.w d0,pl5h
  619.  
  620.  move.l #scrn+200,d0
  621.  move.w d0,pl6l
  622.  swap d0
  623.  move.w d0,pl6h
  624.  
  625.  move.l #scrn+240,d0
  626.  move.w d0,pl7l
  627.  swap d0
  628.  move.w d0,pl7h
  629.  
  630.  move.l #healthpal,a5
  631.  move.l #colbars,a0
  632.  move.l #colbars2,a2
  633.  move.w #scrheight-1,d0
  634.  move.l #0,d6
  635.  move.w #0,d3
  636.  move.w #$2bdf,startwait
  637.  move.w #$2d01,endwait
  638. fillcop
  639.  move.w #$180,d1
  640.  
  641.  move.l a0,a1
  642.  move.l a2,a3
  643.  move.w #$10c,(a1)+
  644.  move.w #$10c,(a3)+
  645.  move.w d3,(a1)+
  646.  move.w d3,(a3)+
  647.  eor.w #$8000,d3
  648.  
  649.  move.w #$106,(a1)+
  650.  move.w #$106,(a3)+
  651.  move.w #$2c42,d5
  652.  or.w d3,d5
  653.  and.w #$fffe,d5
  654.  move.w d5,(a1)+
  655.  move.w d5,(a3)+
  656.  bsr do32
  657.  
  658.  move.w #$106,(a1)+
  659.  move.w #$106,(a3)+
  660.  move.w #$4c42,d5
  661.  or.w d3,d5
  662.  and.w #$fffe,d5
  663.  move.w d5,(a1)+
  664.  move.w d5,(a3)+
  665.  bsr do32
  666.  
  667.  move.w #$106,(a1)+
  668.  move.w #$106,(a3)+
  669.  move.w #$6c42,d5
  670.  or.w d3,d5
  671.  and.w #$fffe,d5
  672.  move.w d5,(a1)+
  673.  move.w d5,(a3)+
  674.  bsr do32
  675.  
  676. **********************************
  677.  
  678.  cmp.b #'s',option
  679.  bra.s smallscrn
  680.  
  681.  move.w startwait,(a1)+
  682.  move.w #$fffe,(a1)+
  683.  move.w endwait,(a1)+
  684.  move.w #$ff00,(a1)+
  685.  move.w startwait,(a3)+
  686.  move.w #$fffe,(a3)+
  687.  move.w endwait,(a3)+
  688.  move.w #$ff00,(a3)+
  689.  
  690.  
  691.  add.w #$300,startwait
  692.  add.w #$300,endwait
  693.  
  694. smallscrn: 
  695.  
  696.  move.l #$1060c42,(a1)+
  697.  move.l #$1060c42,(a3)+
  698.  move.w #$19e,(a1)+
  699.  move.w (a5),(a1)+
  700.  move.w #$19e,(a3)+
  701.  move.w (a5)+,(a3)+
  702.  
  703. **********************************
  704.  
  705.  adda.w #104*4,a0
  706.  adda.w #104*4,a2
  707.  
  708.  dbra d0,fillcop
  709.  
  710. **********************************
  711.  cmp.b #'s',option
  712.  bra smallnotlarge
  713.  move.w #$38,fetchstart
  714.  move.w #$b8,fetchstop
  715.  move.w #$2c81,winstart
  716.  move.w #$2cc1,winstop
  717.  move.w #-40,modulo
  718.  move.w #-40,modulo+4
  719.  
  720.  move.l #scrn+40,a0
  721.  move.l #scrn+160,a1
  722.  move.l #scrn+280,a2
  723.  move.l #scrntab,a3
  724.  move.w #319,d7    ; counter
  725.  move.w #0,d1    ; xpos
  726. plotscrnloop:
  727.  move.b (a3)+,d0
  728.  move.w d1,d2
  729.  asr.w #3,d2
  730.  move.b d1,d3
  731.  not.b d3
  732.  bclr.b d3,-40(a0,d2.w)
  733.  bclr.b d3,(a0,d2.w)
  734.  bclr.b d3,40(a0,d2.w)
  735.  bclr.b d3,-40(a1,d2.w)
  736.  bclr.b d3,(a1,d2.w)
  737.  bclr.b d3,40(a1,d2.w)
  738.  bclr.b d3,-40(a2,d2.w)
  739.  btst #0,d0
  740.  beq.s nobp1
  741.  bset.b d3,-40(a0,d2.w)
  742. nobp1:
  743.  btst #1,d0
  744.  beq.s nobp2
  745.  bset.b d3,(a0,d2.w)
  746. nobp2:
  747.  btst #2,d0
  748.  beq.s nobp3
  749.  bset.b d3,40(a0,d2.w)
  750. nobp3:
  751.  btst #3,d0
  752.  beq.s nobp4
  753.  bset.b d3,-40(a1,d2.w)
  754. nobp4:
  755.  btst #4,d0
  756.  beq.s nobp5
  757.  bset.b d3,(a1,d2.w)
  758. nobp5:
  759.  btst #5,d0
  760.  beq.s nobp6
  761.  bset.b d3,40(a1,d2.w)
  762. nobp6:
  763.  btst #6,d0
  764.  beq.s nobp7
  765.  bset.b d3,-40(a2,d2.w)
  766. nobp7:
  767.  
  768.  addq #1,d1
  769.  
  770.  dbra d7,plotscrnloop
  771.  
  772. smallnotlarge:
  773.  
  774. **********************************
  775.  
  776. ****************************
  777.  jsr INITPLAYER
  778. ; bsr initobjpos
  779. ****************************
  780.  
  781.  add.l #750000,a6
  782. protinitinit:
  783.  neg.l (a6)+
  784.  neg.l (a6)+
  785.  neg.l (a6)+
  786.  neg.l (a6)+
  787.  neg.l (a6)+
  788.  neg.l (a6)+
  789.  neg.l (a6)+
  790.  
  791.  move.l #$dff000,a6
  792.  
  793.  move.l #null,$dff0a0
  794.  move.w #100,$dff0a4
  795.  move.w #443,$dff0a6
  796.  move.w #63,$dff0a8
  797.  
  798.  move.l #null2,$dff0b0
  799.  move.w #100,$dff0b4
  800.  move.w #443,$dff0b6
  801.  move.w #63,$dff0b8
  802.  
  803.  move.l #null4,$dff0c0
  804.  move.w #100,$dff0c4
  805.  move.w #443,$dff0c6
  806.  move.w #63,$dff0c8
  807.  
  808.  move.l #null3,$dff0d0
  809.  move.w #100,$dff0d4
  810.  move.w #443,$dff0d6
  811.  move.w #63,$dff0d8
  812.  
  813.  move.l #tab,a1
  814.  move.w #64,d7
  815.  move.w #0,d6
  816. outerlop
  817.  move.l #pretab,a0
  818.  move.w #255,d5
  819. scaledownlop:
  820.  move.b (a0)+,d0
  821.  ext.w d0
  822.  ext.l d0
  823.  muls d6,d0
  824.  asr.l #6,d0
  825.  move.b d0,(a1)+
  826.  dbra d5,scaledownlop
  827.  addq #1,d6
  828.  dbra d7,outerlop
  829.  
  830.  move.l #$dff000,a6
  831.  
  832.  move.w #$c018,intena(a6)
  833.  
  834.  move.w #$f,dmacon(a6)
  835.  move.w #$820f,dmacon(a6)
  836.  
  837. ; bsr protinit
  838.  
  839.  bsr FullEnergy
  840.  move.w #63,OldAmmo
  841.  move.w #0,Ammo
  842.  bsr AmmoBar
  843.  move.w #0,OldAmmo
  844.  
  845.  move.b #1,PLR1_GunDamage
  846.  move.b #1,PLR2_GunDamage
  847.  move.w #3,PLR1_GunNoise
  848.  move.w #3,PLR2_GunNoise
  849.  
  850.  move.w #10,GunData    ; 10 shots pistol
  851.  st GunData+7
  852.  clr.b GunData+8+7
  853.  clr.w GunData+8
  854.  move.b #0,GunSelected
  855.  
  856. ; move.w #$20,$1dc(a6)
  857.  
  858.  move.w #$0,$dff034
  859.  move.w #0,Conditions
  860.  move.l #KeyMap,a5
  861.  clr.b $45(a5)
  862.  
  863.  move.l #ingame,mt_data
  864.  clr.b UseAllChannels
  865.  
  866.  cmp.b #'b',Prefsfile+3
  867.  bne.s .noback
  868.  jsr mt_init
  869. .noback:
  870.  st doanything
  871.  
  872.  clr.b CHANNELDATA
  873.  clr.b CHANNELDATA+8
  874.  clr.b CHANNELDATA+16
  875.  clr.b CHANNELDATA+24
  876.  
  877.  cmp.b #'b',Prefsfile+3
  878.  bne.s noreserve
  879.  
  880.  st CHANNELDATA
  881.  st CHANNELDATA+8
  882.  st CHANNELDATA+16
  883.  st CHANNELDATA+24
  884. noreserve: 
  885.  
  886. lop: 
  887.  
  888.  move.l #$dff000,a6
  889.  
  890.  move.l drawpt,d0
  891.  move.l olddrawpt,drawpt
  892.  move.l d0,olddrawpt
  893.  move.l d0,$dff084
  894.  move.l drawpt,a3
  895.  adda.w #10,a3
  896.  move.l a3,frompt
  897.  add.l #104*4*40,a3
  898.  move.l a3,midpt
  899.  
  900. waitfortop:
  901.  btst.b #0,intreqrl(a6)
  902.  beq waitfortop
  903.  move.w #$1,intreq(a6)
  904.  
  905.  move.b SpaceTapped,SPCTAP
  906.  clr.b SpaceTapped
  907.  
  908.  move.l waterpt,a0
  909.  move.l (a0)+,watertouse
  910.  cmp.l #endwaterlist,a0
  911.  blt.s okwat
  912.  move.l #waterlist,a0
  913. okwat:
  914.  move.l a0,waterpt
  915.  
  916.  add.w #640,wtan
  917.  and.w #8191,wtan
  918.  add.w #1,wateroff
  919.  and.w #63,wateroff
  920.  
  921.  move.w FramesToDraw,TempFrames
  922.  move.w #0,FramesToDraw
  923.  
  924.  lea GunData,a6
  925.  moveq #0,d0
  926.  move.b GunSelected,d0
  927.  lea (a6,d0.w*8),a6
  928.  move.w (a6),Ammo
  929.  
  930.  JSR INITTIMER
  931.  
  932.  bsr PLR1_Control
  933.  
  934. ; bsr PLR2_Control
  935.  
  936. ******************************************
  937.  jsr objmoveanim
  938.  bsr PlaceFace
  939.  bsr EnergyBar
  940.  bsr AmmoBar
  941.  clr.b PLR1_clicked
  942.  clr.b PLR2_clicked
  943. ******************************************
  944.  
  945.  move.l ObjectPoints,a1
  946.  move.l PLR1_Obj,a0
  947.  move.b damagetaken(a0),d2
  948.  beq notbeenshot
  949.  ext.w d2
  950.  sub.w d2,Energy
  951.  move.b #0,damagetaken(a0)
  952.  move.l #Cheese,FacesPtr
  953.  move.w #3,Cheese
  954.  move.w #-1,FacesCounter
  955. notbeenshot:
  956.  move.b Energy+1,numlives(a0)
  957.  
  958.  move.w (a0),d0
  959.  move.l PLR1_xoff,(a1,d0.w*8)
  960.  move.l PLR1_zoff,4(a1,d0.w*8)
  961.  move.l PLR1_Roompt,a1
  962.  move.w (a1),12(a0)
  963.  move.l PLR1_yoff,d0
  964.  add.l #playerheight+128*24,d0
  965.  asr.l #7,d0
  966.  move.w d0,4(a0)
  967.  
  968.  move.l ObjectPoints,a1
  969.  move.l PLR2_Obj,a0
  970.  move.w (a0),d0
  971.  move.l PLR2_xoff,(a1,d0.w*8)
  972.  move.l PLR2_zoff,4(a1,d0.w*8)
  973.  move.l PLR2_Roompt,a1
  974. ************************
  975.  move.w #-1,12(a0)
  976.  move.w 10(a1),2(a0)
  977. ************************
  978.  move.l PLR2_yoff,d0
  979.  add.l #playerheight+128*24,d0
  980.  asr.l #7,d0
  981.  move.w d0,4(a0)
  982.  
  983.  
  984.  move.w #0,scaleval
  985.  
  986.  move.l PLR1_xoff,xoff
  987.  move.l PLR1_yoff,yoff
  988.  move.l PLR1_zoff,zoff
  989.  move.w PLR1_angpos,angpos
  990.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  991.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  992.  move.l PLR1_Roompt,Roompt
  993.  
  994.  move.w #0,leftclip
  995.  move.w #96,rightclip
  996.  move.w #0,deftopclip
  997.  move.w #79,defbotclip
  998.  move.w #0,topclip
  999.  move.w #79,botclip
  1000. ; sub.l #10*104*4,frompt
  1001. ; sub.l #10*104*4,midpt
  1002.  
  1003. * Subroom loop
  1004.  
  1005.  bsr DrawDisplay
  1006.  
  1007.  bra noglass
  1008.  
  1009. ************************************
  1010. * Test glass routine:
  1011. ************************************
  1012.  
  1013.  move.l #WorkSpace,a0
  1014.  move.l frompt,a2
  1015.  move.w #104*4,d3
  1016.  move.w #1,d6
  1017. ribl
  1018.  move.w #31,d0
  1019. readinto
  1020.  move.w #15,d1
  1021.  move.l a2,a1
  1022. readintodown
  1023.  move.w (a1),(a0)+
  1024.  adda.w d3,a1
  1025.  move.w (a1),(a0)+
  1026.  adda.w d3,a1
  1027.  move.w (a1),(a0)+
  1028.  adda.w d3,a1
  1029.  move.w (a1),(a0)+
  1030.  adda.w d3,a1
  1031.  dbra d1,readintodown
  1032. ; add.w #256-128,a0
  1033.  addq #4,a2
  1034.  dbra d0,readinto
  1035.  addq #4,a2
  1036.  dbra d6,ribl
  1037.  
  1038. * We now have the screen in a buffer
  1039. * for squidging.
  1040.  
  1041.  move.l frompt,a2
  1042.  move.l #WorkSpace,a0
  1043.  move.l glassballpt,a3
  1044.  move.w #$fff,d7
  1045.  move.w #1,d6 
  1046. rfbl:
  1047.  move.w #31,d0
  1048. readoutfrom:
  1049.  move.w #15,d1
  1050.  move.l a2,a1
  1051.  moveq.w #0,d5
  1052. readoutfromdown:
  1053.  move.w (a3)+,d2
  1054.  beq.s nono1
  1055. ; add.w d5,d2
  1056.  move.w (a0,d2.w*2),d2
  1057.  and.w d7,d2
  1058.  move.w d2,(a1)
  1059. nono1:
  1060.  addq #1,d5
  1061.  add.w d3,a1
  1062.  move.w (a3)+,d2
  1063.  beq.s nono2
  1064. ; add.w d5,d2
  1065.  move.w (a0,d2.w*2),d2
  1066.  and.w d7,d2
  1067.  move.w d2,(a1)
  1068. nono2:
  1069.  addq #1,d5
  1070.  add.w d3,a1
  1071.  move.w (a3)+,d2
  1072.  beq.s nono3
  1073. ; add.w d5,d2
  1074.  move.w (a0,d2.w*2),d2
  1075.  and.w d7,d2
  1076.  move.w d2,(a1)
  1077. nono3:
  1078.  addq #1,d5
  1079.  add.w d3,a1
  1080.  move.w (a3)+,d2
  1081.  beq.s nono4
  1082. ; add.w d5,d2
  1083.  move.w (a0,d2.w*2),d2
  1084.  and.w d7,d2
  1085.  move.w d2,(a1)
  1086. nono4:
  1087.  addq #1,d5
  1088.  add.w d3,a1
  1089.  dbra d1,readoutfromdown
  1090.  addq #4,a2
  1091. ; adda.w #128,a0
  1092.  dbra d0,readoutfrom
  1093.  addq #4,a2
  1094.  dbra d6,rfbl
  1095.  
  1096.  move.l glassballpt,d0
  1097.  add.l #64*64*2,d0
  1098.  cmp.l #endglass,d0
  1099.  blt notoffglass
  1100.  move.l #glassball,d0
  1101. notoffglass
  1102.  move.l d0,glassballpt
  1103.  
  1104. noglass:
  1105.  
  1106.  tst.b PLR2
  1107.  bra.s nodrawp2
  1108.  
  1109.  
  1110.  move.l PLR2_xoff,xoff
  1111.  move.l PLR2_yoff,yoff
  1112.  move.l PLR2_zoff,zoff
  1113.  move.w PLR2_angpos,angpos
  1114.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1115.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1116.  
  1117.  move.w #0,leftclip
  1118.  move.w #96,rightclip
  1119.  move.w #10,deftopclip
  1120.  move.w #69,defbotclip
  1121.  add.l #68*104*4,frompt
  1122.  add.l #68*104*4,midpt
  1123.  
  1124.  bsr DrawDisplay
  1125.  
  1126.  
  1127. nodrawp2:
  1128.  
  1129. ; move.l #brightentab,a0
  1130. ; move.l frompt,a3
  1131. ; adda.w #(4*33)+(104*4*20),a3
  1132. ; move.w #20,d7
  1133. ; move.w #20,d6
  1134. ;horl:
  1135. ; move.w d6,d5
  1136. ; move.l a3,a1
  1137. ;vertl
  1138. ; move.w (a1),d0
  1139. ; move.w (a0,d0.w*2),(a1)
  1140. ; addq #4,a1
  1141. ; dbra d5,vertl
  1142. ; adda.w #104*4,a3
  1143. ; dbra d7,horl
  1144.  
  1145.  move.l #$dff000,a6
  1146.  
  1147. ; move.w #$300,col0(a6)
  1148.  
  1149.  move.l #KeyMap,a5
  1150.  tst.b $45(a5)
  1151.  beq.s noend
  1152. waitrel
  1153.  btst #7,$bfe001
  1154.  beq.s waitrel
  1155.  bra end
  1156. noend:
  1157.  
  1158.  tst.w Energy
  1159.  bgt .noend
  1160.  cmp.b #'i',option+4
  1161.  bne end
  1162.  move.w #10,Energy
  1163. .noend:
  1164.  
  1165.  move.l SwitchData,a0
  1166.  tst.b 24+8(a0)
  1167.  bne end
  1168.  
  1169.  JSR STOPTIMER
  1170.  
  1171.  bra lop
  1172.  
  1173. ***************************************************************************
  1174. ***************************************************************************
  1175. ****************** End of Main Loop here ********************************** 
  1176. ***************************************************************************
  1177. ***************************************************************************
  1178.  
  1179. GunSelected: dc.b 0
  1180.  even
  1181.  
  1182. GunData:
  1183. ; 0=Pistol 1=Big Gun
  1184. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(w)
  1185. ; damage,gotgun(b)
  1186.  
  1187.  dc.w 0
  1188.  dc.b 1,3
  1189.  dc.w 20
  1190.  dc.b 1,$ff
  1191.  
  1192.  dc.w 0
  1193.  dc.b 2,1
  1194.  dc.w 40
  1195.  dc.b 4,0
  1196.  
  1197. protA: dc.w 0
  1198.  
  1199. Path:
  1200. ; incbin "testpath"
  1201. endpath:
  1202. pathpt: dc.l Path
  1203.  
  1204. PLR1KEYS: dc.b 0
  1205. PLR1PATH: dc.b 0
  1206. PLR1MOUSE: dc.b -1
  1207. PLR1JOY: dc.b 0
  1208.  
  1209.  even
  1210.  
  1211. Bobble: dc.w 0
  1212. xwobble: dc.l 0
  1213. xwobxoff: dc.w 0
  1214. xwobzoff: dc.w 0
  1215.  
  1216. PLR1_Control:
  1217.  
  1218. ; Take a snapshot of everything.
  1219.  
  1220.  move.l PLR1_xoff,d2
  1221.  move.l d2,PLR1_oldxoff
  1222.  move.l d2,oldx
  1223.  move.l PLR1_zoff,d3
  1224.  move.l d3,PLR1_oldzoff
  1225.  move.l d3,oldz
  1226.  move.l PLR1s_xoff,d0
  1227.  move.l d0,PLR1_xoff
  1228.  move.l d0,newx
  1229.  move.l PLR1s_zoff,d1
  1230.  move.l d1,newz
  1231.  move.l d1,PLR1_zoff
  1232.  sub.l d2,d0
  1233.  sub.l d3,d1
  1234.  move.l d0,xdiff
  1235.  move.l d1,zdiff
  1236.  move.w PLR1s_sinval,PLR1_sinval
  1237.  move.w PLR1s_cosval,PLR1_cosval
  1238.  move.w PLR1s_angpos,PLR1_angpos
  1239.  move.l PLR1s_yoff,d0
  1240.  move.l #SineTable,a1
  1241.  move.w Bobble,d1
  1242.  move.w (a1,d1.w),d1
  1243.  move.w d1,d3
  1244.  ble.s notnegative
  1245.  neg.w d1
  1246. notnegative:
  1247.  add.w #16384,d1
  1248.  asr.w #5,d1
  1249.  move.w d1,d2
  1250.  add.w d1,d1
  1251.  add.w d2,d1
  1252.  ext.l d1
  1253.  add.l d1,d0
  1254.  
  1255.  asr.w #5,d3
  1256.  ext.l d3
  1257.  move.l d3,xwobble
  1258.  move.w PLR1_sinval,d1
  1259.  muls d3,d1
  1260.  move.w PLR1_cosval,d2
  1261.  muls d3,d2
  1262.  swap d1
  1263.  swap d2
  1264.  asr.w #6,d1
  1265.  move.w d1,xwobxoff
  1266.  asr.w #6,d2
  1267.  neg.w d2
  1268.  move.w d2,xwobzoff
  1269.  
  1270.  
  1271.  move.l d0,PLR1_yoff
  1272.  move.l d0,newy
  1273.  move.l #playerheight,thingheight
  1274.  move.l #40*256,StepUpVal
  1275.  
  1276.  move.l PLR1_Roompt,objroom
  1277.  move.w #%100000000,wallflags
  1278.  
  1279.  bsr MoveObject
  1280.  move.w #0,wallflags
  1281.  move.l objroom,PLR1_Roompt
  1282.  move.w newx,PLR1_xoff
  1283.  move.w newz,PLR1_zoff
  1284.  move.l PLR1_xoff,PLR1s_xoff
  1285.  move.l PLR1_zoff,PLR1s_zoff
  1286.  
  1287.  move.l PLR1_Roompt,a0
  1288.  move.l 2(a0),d0
  1289.  adda.w #ToZonePts,a0
  1290.  sub.l #playerheight,d0
  1291.  move.l d0,PLR1s_tyoff
  1292.  
  1293. ; move.l (a0),a0        ; jump to viewpoint list
  1294.  * A0 is pointing at a pointer to list of points to rotate
  1295.  move.w (a0)+,d1
  1296.  ext.l d1
  1297.  add.l PLR1_Roompt,d1
  1298.  move.l d1,PLR1_PointsToRotatePtr
  1299.  tst.w (a0)+
  1300.  beq.s nobackgraphics
  1301.  move.l a0,-(a7)
  1302.  jsr putinbackdrop 
  1303.  move.l (a7)+,a0
  1304. nobackgraphics:
  1305.  move.l a0,PLR1_ListOfGraphRooms
  1306.  
  1307. *****************************************************
  1308.  
  1309.  rts
  1310.  
  1311. KeyMap: ds.b 256
  1312.  
  1313. PLR2_Control:
  1314.  move.l #SineTable,a0
  1315.  
  1316.  bsr turnleftright
  1317.  
  1318.  move.w PLR2_angspd,d1
  1319.  move.w PLR2_angpos,d0
  1320.  move.w (a0,d0.w),PLR2_sinval
  1321.  adda.w #2048,a0
  1322.  move.w (a0,d0.w),PLR2_cosval
  1323.  
  1324.  move.l PLR2_xspdval,d6
  1325.  move.l PLR2_zspdval,d7
  1326.  
  1327.  move.w PLR2_xoff,oldxoff
  1328.  move.w PLR2_zoff,oldzoff
  1329.  
  1330.  neg.l d6
  1331.  ble.s .nobug1
  1332.  asr.l #1,d6
  1333.  add.l #1,d6
  1334.  bra.s .bug1
  1335. .nobug1
  1336.  asr.l #1,d6
  1337. .bug1:
  1338.  
  1339. ; beq.s goinnowhere
  1340. ; blt.s goinfor
  1341. ; cmp.l #4*65536,d6
  1342. ; ble.s goinnowhere
  1343. ; move.l #4*65536,d6
  1344. ;goinfor:
  1345. ; cmp.l #-4*65536,d6
  1346. ; bge.s goinnowhere
  1347. ; move.l #-4*65536,d6
  1348. ;goinnowhere:
  1349.  
  1350.  neg.l d7
  1351.  ble.s .nobug2
  1352.  asr.l #1,d7
  1353.  add.l #1,d7
  1354.  bra.s .bug2
  1355. .nobug2
  1356.  asr.l #1,d7
  1357. .bug2: 
  1358.  
  1359. ; beq.s goinnowhere2
  1360. ; blt.s goinfor2
  1361. ; cmp.l #4*65536,d7
  1362. ; ble.s goinnowhere2
  1363. ; move.l #4*65536,d7
  1364. ;goinfor2:
  1365. ; cmp.l #-4*65536,d7
  1366. ; bge.s goinnowhere2
  1367. ; move.l #-4*65536,d7
  1368. ;goinnowhere2:
  1369.  
  1370.  move.w PLR2_sinval,d1
  1371.  move.w PLR2_cosval,d2
  1372.  move.w PLR2_ForwardSpd,d3
  1373.  
  1374.  muls d3,d2
  1375.  muls d3,d1
  1376.  
  1377.  sub.l d1,d6
  1378.  sub.l d2,d7
  1379.  add.l PLR2_pushx,d6
  1380.  add.l PLR2_pushz,d7 
  1381.  add.l d6,PLR2_xspdval
  1382.  add.l d7,PLR2_zspdval
  1383.  move.l PLR2_xspdval,d6
  1384.  move.l PLR2_zspdval,d7
  1385.  add.l d6,PLR2_xoff
  1386.  add.l d7,PLR2_zoff
  1387.  
  1388.  move.w PLR2_xoff,newx
  1389.  move.w PLR2_zoff,newz
  1390.  move.w oldxoff,oldx
  1391.  move.w oldzoff,oldz
  1392.  move.l PLR2_xspdval,xdiff
  1393.  move.l PLR2_zspdval,zdiff
  1394.  move.l PLR2_Roompt,objroom
  1395.  move.w #%100000000,wallflags
  1396.  bsr MoveObject
  1397.  move.w #0,wallflags
  1398.  move.l objroom,PLR2_Roompt
  1399.  move.w newx,PLR2_xoff
  1400.  move.w newz,PLR2_zoff
  1401.  
  1402.  move.l PLR2_xoff,d0
  1403.  move.l PLR2_zoff,d1
  1404.  sub.l oldxoff,d0
  1405.  sub.l oldzoff,d1
  1406.  move.l #0,PLR2_pushx
  1407.  move.l #0,PLR2_pushz
  1408.  move.l d0,PLR2_opushx
  1409.  move.l d1,PLR2_opushz
  1410.  
  1411.  move.l PLR2_Roompt,a0
  1412.  move.l 2(a0),d0
  1413.  sub.l #playerheight,d0
  1414.  move.l d0,PLR2_tyoff
  1415.  adda.w #22,a0
  1416.  
  1417. ; move.l (a0),a0        ; jump to viewpoint list
  1418.  * A0 is pointing at a pointer to list of points to rotate
  1419.  move.l (a0)+,PLR2_PointsToRotatePtr
  1420.  move.l a0,PLR2_ListOfGraphRooms
  1421.  
  1422. *****************************************************
  1423.  
  1424.  move.l PLR2_tyoff,d0
  1425.  move.l PLR2_yoff,d1
  1426.  move.l PLR2_yvel,d2
  1427.  add.l d2,d1
  1428.  add.l #1024,d2
  1429.  sub.l d1,d0
  1430.  bgt.s .shouldfall
  1431.  move.l #0,d2
  1432.  add.l d0,d1
  1433. .shouldfall:
  1434.  move.l d2,PLR2_yvel
  1435.  move.l d1,PLR2_yoff
  1436.  rts
  1437.  
  1438.  
  1439. DrawDisplay:
  1440.  
  1441.  move.l #SineTable,a0
  1442.  move.w angpos,d0
  1443.  move.w (a0,d0.w),d6
  1444.  adda.w #2048,a0
  1445.  move.w (a0,d0.w),d7
  1446.  move.w d6,sinval
  1447.  move.w d7,cosval
  1448.  
  1449.  move.l yoff,d0
  1450.  asr.l #8,d0
  1451.  move.w d0,d1
  1452.  and.w #63,d1
  1453.  move.w d1,wallyoff
  1454.  asl.w #2,d0
  1455.  move.w d0,flooryoff
  1456.  
  1457.  move.w xoff,d6
  1458.  move.w d6,d3
  1459.  asr.w #1,d3
  1460.  add.w d3,d6
  1461.  asr.w #1,d6
  1462.  move.w d6,xoff34
  1463.  
  1464.  move.w zoff,d6
  1465.  move.w d6,d3
  1466.  asr.w #1,d3
  1467.  add.w d3,d6
  1468.  asr.w #1,d6
  1469.  move.w d6,zoff34
  1470.  
  1471.  bsr RotateLevelPts
  1472.  bsr RotateObjectPts
  1473.  bsr OrderZones
  1474.  
  1475.  move.l ListOfGraphRooms,a0
  1476.  
  1477.  move.l endoflist,a0
  1478. subroomloop:
  1479.  move.w -(a0),d7
  1480.  blt jumpoutofrooms
  1481.  
  1482. ; bsr setlrclip
  1483. ; move.w leftclip,d0
  1484. ; cmp.w rightclip,d0
  1485. ; bge subroomloop
  1486.  move.l a0,-(a7)
  1487.  move.l ZoneGraphAdds,a0
  1488.  move.l (a0,d7.w*4),a0
  1489.  add.l #LEVELGRAPHICS,a0
  1490.  move.l a0,ThisRoomToDraw
  1491.  
  1492.  move.l ListOfGraphRooms,a1
  1493.  
  1494. finditit:
  1495.  tst.w (a1)
  1496.  blt nomoretodoatall
  1497.  cmp.w (a1),d7
  1498.  beq outoffind
  1499.  adda.w #8,a1
  1500.  bra finditit
  1501.  
  1502. outoffind:
  1503.  
  1504.  move.l a1,-(a7)
  1505.  
  1506.  move.w #0,leftclip
  1507.  move.w #96,rightclip
  1508.  moveq #0,d7
  1509.  move.w 2(a1),d7
  1510.  blt.s outofrcliplop
  1511.  move.l #LEVELCLIPS,a0
  1512.  lea (a0,d7.l*4),a0
  1513.      
  1514.      
  1515.      
  1516.      
  1517.      
  1518.      
  1519.  tst.w (a0)
  1520.  blt outoflcliplop
  1521.  
  1522.  bsr NEWsetlclip
  1523.  
  1524. intolcliplop:        ; clips
  1525.  tst.w (a0)
  1526.  blt outoflcliplop
  1527.  
  1528.  bsr NEWsetlclip 
  1529.  bra intolcliplop
  1530.  
  1531. outoflcliplop:
  1532.  
  1533.  addq #4,a0
  1534.  
  1535.  tst.w (a0)
  1536.  blt outofrcliplop
  1537.  
  1538.  bsr NEWsetrclip
  1539.  
  1540. intorcliplop:        ; clips
  1541.  tst.w (a0)
  1542.  blt outofrcliplop
  1543.  
  1544.  bsr NEWsetrclip 
  1545.  bra intorcliplop
  1546.  
  1547. outofrcliplop:
  1548.  
  1549.  move.l ThisRoomToDraw,a0
  1550.  move.w leftclip,d0
  1551.  cmp.w #95,d0
  1552.  bge dontbothercantseeit
  1553.  move.w rightclip,d1
  1554.  blt dontbothercantseeit
  1555.  cmp.w d1,d0
  1556.  bge dontbothercantseeit
  1557.  
  1558.  bsr dothisroom
  1559.  
  1560. dontbothercantseeit:
  1561. pastemp:
  1562.  
  1563.  move.l (a7)+,a1
  1564.  move.l ThisRoomToDraw,a0
  1565.  move.w (a0),d7
  1566.  adda.w #8,a1
  1567.  bra finditit
  1568.  
  1569. nomoretodoatall:
  1570.  
  1571.  move.l (a7)+,a0
  1572.  
  1573.  bra subroomloop
  1574.  
  1575. jumpoutofrooms:
  1576.  
  1577.  rts
  1578.  
  1579. prot9: dc.w 0
  1580.  
  1581. TempBuffer: ds.l 100 
  1582.  
  1583. ClipTable: ds.l 30
  1584. EndOfClipPt: dc.l 0
  1585.  
  1586. dothisroom
  1587.  
  1588.  move.w (a0)+,d0
  1589.  move.w d0,currzone
  1590.  move.l ZoneAdds,a1
  1591.  move.l (a1,d0.w*4),a1
  1592.  add.l #LEVELDATA,a1
  1593.  move.w 10(a1),ZoneBright
  1594.  
  1595. polyloop:
  1596.  move.w (a0)+,d0
  1597.  blt jumpoutofloop
  1598.  beq itsawall
  1599.  cmp.w #3,d0
  1600.  beq itsasetclip
  1601.  blt itsafloor
  1602.  cmp.w #4,d0
  1603.  beq itsanobject
  1604.  cmp.w #5,d0
  1605.  beq.s itsanarc
  1606.  cmp.w #6,d0
  1607.  beq itsalightbeam
  1608.  cmp.w #7,d0
  1609.  beq.s itswater
  1610.  cmp.w #9,d0
  1611.  ble itsachunkyfloor
  1612.  cmp.w #11,d0
  1613.  ble.s itsabumpyfloor
  1614.  cmp.w #12,d0
  1615.  beq.s itsbackdrop
  1616.  cmp.w #13,d0
  1617.  beq.s itsaseewall
  1618.  
  1619.  bra polyloop
  1620.  
  1621. itsaseewall:
  1622.  st seethru
  1623.  move.l #stripbufferthru,a1
  1624.  jsr itsawalldraw
  1625.  bra polyloop
  1626.  
  1627. itsbackdrop:
  1628.  jsr putinbackdrop
  1629.  bra polyloop
  1630.  
  1631. itswater:
  1632.  move.w #1,d0
  1633.  move.l #FloorLine,LineToUse
  1634.  st usewater
  1635.  clr.b usebumps
  1636.  jsr itsafloordraw
  1637.  bra polyloop
  1638.  
  1639. itsanarc:
  1640.  jsr CurveDraw
  1641.  bra polyloop
  1642. itsanobject:
  1643.  jsr ObjDraw
  1644.  bra polyloop
  1645. itsalightbeam:
  1646.  jsr LightDraw
  1647.  bra polyloop
  1648.  
  1649. itsabumpyfloor:
  1650.  sub.w #9,d0
  1651.  st usebumps
  1652.  st smoothbumps
  1653.  clr.b usewater
  1654.  move.l #BumpLine,LineToUse
  1655.  jsr itsafloordraw
  1656.  bra polyloop
  1657.  
  1658. itsachunkyfloor:
  1659.  subq.w #7,d0
  1660.  st usebumps
  1661.  sub.w #12,topclip
  1662. ; add.w #10,botclip
  1663.  clr.b smoothbumps
  1664.  clr.b usewater
  1665.  move.l #BumpLine,LineToUse
  1666.  jsr itsafloordraw
  1667.  add.w #12,topclip
  1668. ; sub.w #10,botclip
  1669.  bra polyloop 
  1670.  
  1671. itsafloor:
  1672.  
  1673.  move.l #FloorLine,LineToUse
  1674. * 1,2 = floor/roof
  1675.  clr.b usewater
  1676.  clr.b usebumps
  1677.  jsr itsafloordraw
  1678.  bra polyloop
  1679. itsasetclip:
  1680.  bra polyloop
  1681. itsawall:
  1682.  clr.b seethru
  1683. ; move.l #stripbuffer,a1
  1684.  jsr itsawalldraw
  1685.  bra polyloop
  1686.  
  1687. jumpoutofloop:
  1688.  rts
  1689.  
  1690. ThisRoomToDraw: dc.l 0
  1691.  
  1692.  include "ab3:source/OrderZones"
  1693.  
  1694. ReadMouse:
  1695.  clr.l d0
  1696.  clr.l d1
  1697.  move.w $a(a6),d0
  1698.  lsr.w #8,d0
  1699.  ext.l d0
  1700.  move.w d0,d3
  1701.  move.w oldy,d2
  1702.  sub.w d2,d0
  1703.  
  1704.  cmp.w #127,d0
  1705.  blt nonegy
  1706.  move.w #255,d1
  1707.  sub.w d0,d1
  1708.  move.w d1,d0
  1709.  neg.w d0
  1710. nonegy:
  1711.  
  1712.  cmp.w #-127,d0
  1713.  bge nonegy2
  1714.  move.w #255,d1
  1715.  add.w d0,d1
  1716.  move.w d1,d0
  1717. nonegy2:
  1718.  
  1719.  add.b d0,d2
  1720.  add.w d0,oldy2
  1721.  move.w d2,oldy
  1722.  move.w d2,d0
  1723.  
  1724.  move.w oldy2,d0
  1725.  move.w d0,ymouse
  1726.  
  1727.  clr.l d0
  1728.  clr.l d1
  1729.  move.w $a(a6),d0
  1730.  ext.w d0
  1731.  ext.l d0
  1732.  move.w d0,d3
  1733.  move.w oldmx,d2
  1734.  sub.w d2,d0
  1735.  
  1736.  cmp.w #127,d0
  1737.  blt nonegx
  1738.  move.w #255,d1
  1739.  sub.w d0,d1
  1740.  move.w d1,d0
  1741.  neg.w d0
  1742. nonegx:
  1743.  
  1744.  cmp.w #-127,d0
  1745.  bge nonegx2
  1746.  move.w #255,d1
  1747.  add.w d0,d1
  1748.  move.w d1,d0
  1749. nonegx2:
  1750.  
  1751.  add.b d0,d2
  1752.  move.w d0,d1
  1753.  move.w d2,oldmx
  1754.  
  1755.  
  1756.  move.w #$0,$dff034
  1757.  btst #2,$dff016
  1758.  beq.s noturn
  1759.  
  1760.  add.w d0,oldx2
  1761.  move.w oldx2,d0
  1762.  and.w #2047,d0
  1763.  move.w d0,oldx2
  1764.  
  1765.  asl.w #2,d0
  1766.  sub.w prevx,d0
  1767.  add.w d0,prevx
  1768.  add.w d0,PLR1s_angpos
  1769.  and.w #8190,PLR1s_angpos
  1770.  move.w #0,lrs
  1771.  rts
  1772.  
  1773. noturn:
  1774.  
  1775. ; got to move lr instead. 
  1776.  
  1777. ; d1 = speed moved l/r
  1778.  
  1779.  move.w d1,lrs
  1780.  
  1781.  rts
  1782.  
  1783. lrs: dc.w 0
  1784. prevx: dc.w 0
  1785.  
  1786. mang: dc.w 0
  1787. oldymouse: dc.w 0
  1788. xmouse: dc.w 0
  1789. ymouse: dc.w 0
  1790. oldx2: dc.w 0
  1791. oldmx: dc.w 0
  1792. oldy: dc.w 0
  1793. oldy2: dc.w 0
  1794.  
  1795. RotateLevelPts:
  1796.  
  1797.  move.w sinval,d6
  1798.  swap d6
  1799.  move.w cosval,d6
  1800.  
  1801.  move.l PointsToRotatePtr,a0
  1802.  move.l Points,a3
  1803.  move.l #Rotated,a1
  1804.  move.l #OnScreen,a2
  1805.  move.w xoff,d4
  1806.  move.w zoff,d5
  1807.  
  1808. ; move.w #$c40,$dff106
  1809. ; move.w #$f00,$dff180
  1810.  
  1811. pointrotlop:
  1812.  move.w (a0)+,d7
  1813.  blt.s outofpointrot
  1814.  
  1815.  move.w (a3,d7*4),d0
  1816.  sub.w d4,d0
  1817.  move.w d0,d2
  1818.  move.w 2(a3,d7*4),d1
  1819.  sub.w d5,d1
  1820.  muls d6,d2
  1821.  swap d6
  1822.  move.w d1,d3
  1823.  muls d6,d3
  1824.  sub.l d3,d2
  1825.  add.l d2,d2
  1826.  swap d2
  1827.  ext.l d2
  1828.  asl.l #7,d2
  1829.  add.l xwobble,d2
  1830.  move.l d2,(a1,d7*8)
  1831.  
  1832.  muls d6,d0
  1833.  swap d6
  1834.  muls d6,d1
  1835.  add.l d0,d1
  1836.  asl.l #2,d1
  1837.  swap d1
  1838.  move.l d1,4(a1,d7*8)
  1839.  
  1840.  tst.w d1
  1841.  bgt.s ptnotbehind
  1842.  tst.w d2
  1843.  bgt.s onrightsomewhere
  1844.  move.w #0,d2
  1845.  bra putin
  1846. onrightsomewhere:
  1847.  move.w #96,d2
  1848.  bra putin
  1849. ptnotbehind:
  1850.  
  1851.  divs d1,d2
  1852.  add.w #47,d2
  1853. putin:
  1854.  move.w d2,(a2,d7*2)
  1855.  
  1856.  bra pointrotlop
  1857. outofpointrot:
  1858.  
  1859. ; move.w #$c40,$dff106
  1860. ; move.w #$ff0,$dff180
  1861.  
  1862.  rts
  1863.  
  1864. RotateObjectPts:
  1865.  
  1866.  move.w sinval,d5
  1867.  move.w cosval,d6
  1868.  
  1869.  move.l ObjectPoints,a0
  1870.  move.w NumObjectPoints,d7
  1871.  move.l #ObjRotated,a1
  1872.  move.l #ObsInLine,a2
  1873. objpointrotlop:
  1874.  
  1875.  move.w (a0),d0
  1876.  sub.w xoff,d0
  1877.  move.w 4(a0),d1
  1878.  addq #8,a0
  1879.  sub.w zoff,d1
  1880.  move.w d0,d2
  1881.  muls d6,d2
  1882.  move.w d1,d3
  1883.  muls d5,d3
  1884.  sub.l d3,d2
  1885.  add.l d2,d2
  1886.  swap d2
  1887.  move.w d2,(a1)+
  1888.  
  1889.  muls d5,d0
  1890.  muls d6,d1
  1891.  add.l d0,d1
  1892.  asl.l #2,d1
  1893.  swap d1
  1894.  moveq #0,d3
  1895.  
  1896.  move.w d1,(a1)+
  1897.  ext.l d2
  1898.  asl.l #7,d2
  1899.  add.l xwobble,d2
  1900.  move.l d2,(a1)+
  1901.  sub.l xwobble,d2
  1902.  tst.w d1
  1903.  ble.s notinline
  1904.  
  1905.  cmp.l #-60*128,d2
  1906.  blt.s notinline
  1907.  cmp.l #60*128,d2
  1908.  sle d3
  1909. notinline
  1910.  move.b d3,(a2)+
  1911.  
  1912.  dbra d7,objpointrotlop
  1913.  
  1914.  rts
  1915.  
  1916. LightDraw:
  1917.  
  1918.  move.w (a0)+,d0
  1919.  move.w (a0)+,d1
  1920.  move.l #Rotated,a1
  1921.  move.w 6(a1,d0.w*8),d2
  1922.  ble.s oneendbehind
  1923.  move.w 6(a1,d1.w*8),d3
  1924.  bgt.s bothendsinfront
  1925.  
  1926. oneendbehind:
  1927.  rts
  1928. bothendsinfront:
  1929.  
  1930.  move.l #OnScreen,a2
  1931.  move.w (a2,d0.w*2),d0
  1932.  bge.s okleftend
  1933.  moveq #0,d0
  1934. okleftend:
  1935.  move.w (a2,d1.w*2),d1
  1936.  bgt.s somevis
  1937.  rts
  1938. somevis:
  1939.  cmp.w #95,d0
  1940.  ble.s somevis2
  1941.  rts
  1942. somevis2:
  1943.  cmp.w #95,d1
  1944.  ble.s okrightend
  1945.  move.w #95,d1
  1946. okrightend:
  1947.  
  1948.  sub.w d0,d1
  1949.  blt.s wrongbloodywayround
  1950.  move.l #brightentab,a4
  1951.  move.l #objintocop,a1
  1952.  lea (a1,d0.w*2),a1
  1953.  
  1954.  move.l frompt,a3
  1955.  move.w #104*4,d6
  1956.  move.w #79,d2
  1957. lacross:
  1958.  move.w d2,d3
  1959.  move.l a3,a2
  1960.  adda.w (a1)+,a2
  1961. ldown:
  1962.  add.w d6,a2
  1963.  move.w (a2),d7
  1964.  move.w (a4,d7.w*2),(a2)
  1965.  dbra d3,ldown
  1966.  dbra d1,lacross
  1967.  
  1968. wrongbloodywayround:
  1969.  
  1970.  rts
  1971.  
  1972. FaceToPlace: dc.w 0
  1973.  
  1974. Cheese:
  1975.  dc.w 4,15
  1976.  
  1977. FacesList:
  1978.  dc.w 0,4*4
  1979.  dc.w 1,2*4
  1980.  dc.w 0,2*4
  1981.  dc.w 2,2*4
  1982.  dc.w 0,2*4
  1983.  dc.w 1,3*4
  1984.  dc.w 0,2*4
  1985.  dc.w 2,3*4
  1986.  dc.w 0,5*4
  1987.  dc.w 1,2*4
  1988.  dc.w 0,2*4
  1989.  dc.w 2,2*4
  1990.  dc.w 0,2*4
  1991.  dc.w 1,2*4
  1992.  dc.w 0,2*4
  1993.  dc.w 2,3*4
  1994.  dc.w 0,1*4
  1995.  dc.w 1,3*4
  1996.  dc.w 0,1*4
  1997.  dc.w 2,3*4
  1998.  dc.w 0,1*4
  1999.  
  2000. EndOfFacesList:
  2001.  
  2002. FacesPtr:
  2003.  dc.l FacesList
  2004. FacesCounter:
  2005.  dc.w 0
  2006. Expression:
  2007.  dc.w 0
  2008.  
  2009. PlaceFace:
  2010.  
  2011.  move.w FacesCounter,d0
  2012.  subq #1,d0
  2013.  bgt.s NoNewFace
  2014.  
  2015.  move.l FacesPtr,a0
  2016.  
  2017.  move.w 2(a0),d0
  2018.  move.w (a0),Expression
  2019.  addq #4,a0
  2020.  cmp.l #EndOfFacesList,a0
  2021.  blt.s NotFirstFace
  2022.  
  2023.  move.l #FacesList,a0
  2024.  
  2025. NotFirstFace
  2026.  move.l a0,FacesPtr
  2027.  
  2028. NoNewFace:
  2029.  
  2030.  move.w d0,FacesCounter
  2031.  
  2032.  Move.w FaceToPlace,d0
  2033.  muls #5,d0
  2034.  add.w Expression,d0
  2035.  move.l #FacePlace+10,a0
  2036.  move.l #Faces,a1
  2037.  muls #(4*32*5),d0
  2038.  adda.w d0,a1
  2039.  move.w #4,d0
  2040.  move.w #24,d1
  2041.  
  2042.  move.w #4,d3
  2043. bitplaneloop:
  2044.  move.w #31,d2
  2045. PlaceFaceToPlaceInFacePlaceLoop:
  2046.  move.l (a1),(a0)
  2047.  adda.w d0,a1
  2048.  adda.w d1,a0
  2049.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  2050.  dbra d3,bitplaneloop
  2051.  
  2052.  rts
  2053.  
  2054. Energy:
  2055.  dc.w 191
  2056. OldEnergy:
  2057.  dc.w 191
  2058. Ammo: dc.w 63
  2059. OldAmmo: dc.w 63
  2060.  
  2061. FullEnergy:
  2062.  move.w #127,Energy
  2063.  move.w #127,OldEnergy
  2064.  move.l #health,a0
  2065.  move.l #borders,a1
  2066.  add.l #25*8*2+6,a1
  2067.  lea 2592(a1),a2
  2068.  move.w #127,d0
  2069. PutInFull:
  2070.  move.b (a0)+,(a1)
  2071.  move.b (a0)+,8(a1)
  2072.  add.w #16,a1
  2073.  move.b (a0)+,(a2)
  2074.  move.b (a0)+,8(a2)
  2075.  add.w #16,a2
  2076.  dbra d0,PutInFull
  2077.  
  2078.  rts
  2079.  
  2080. EnergyBar:
  2081.  
  2082.  move.w Energy,d0
  2083.  cmp.w OldEnergy,d0
  2084.  bne.s gottochange
  2085.  
  2086. NoChange
  2087.  rts
  2088.  
  2089. gottochange:
  2090.   
  2091.  blt LessEnergy
  2092.  cmp.w #127,Energy
  2093.  blt.s NotMax
  2094.  move.w #127,Energy
  2095. NotMax:
  2096.  
  2097.  move.w Energy,d0
  2098.  move.w OldEnergy,d2
  2099.  sub.w d0,d2
  2100.  beq.s NoChange    
  2101.  neg.w d2
  2102.  
  2103.  move.w #127,d3
  2104.  sub.w d0,d3
  2105.  
  2106.  move.l #health,a0
  2107.  lea (a0,d3.w*4),a0
  2108.  move.l #borders+25*16+6,a1
  2109.  lsl.w #4,d3
  2110.  add.w d3,a1
  2111.  lea 2592(a1),a2
  2112.  
  2113. EnergyRise:
  2114.  move.b (a0)+,(a1)
  2115.  move.b (a0)+,8(a1)
  2116.  add.w #16,a1
  2117.  move.b (a0)+,(a2)
  2118.  move.b (a0)+,8(a2)
  2119.  add.w #16,a2
  2120.  subq #1,d2
  2121.  bgt.s EnergyRise
  2122.  
  2123.  move.w Energy,OldEnergy
  2124.  
  2125.  rts 
  2126.  
  2127. LessEnergy: 
  2128.  move.w OldEnergy,d2
  2129.  sub.w d0,d2
  2130.  
  2131.  move.w #127,d3
  2132.  sub.w OldEnergy,d3
  2133.  
  2134.  move.l #borders+25*16+6,a1
  2135.  asl.w #4,d3
  2136.  add.w d3,a1
  2137.  lea 2592(a1),a2
  2138.  
  2139. EnergyDrain:
  2140.  move.b #0,(a1)
  2141.  move.b #0,8(a1)
  2142.  move.b #0,(a2)
  2143.  move.b #0,8(a2)
  2144.  add.w #16,a1
  2145.  add.w #16,a2
  2146.  subq #1,d2
  2147.  bgt.s EnergyDrain
  2148.  
  2149.  move.w Energy,OldEnergy
  2150.  
  2151.  rts 
  2152.  
  2153. AmmoBar:
  2154.  
  2155.  move.w Ammo,d0
  2156.  cmp.w OldAmmo,d0
  2157.  bne.s .gottochange
  2158.  
  2159. .NoChange
  2160.  rts
  2161.  
  2162. .gottochange:
  2163.   
  2164.  blt LessAmmo
  2165.  cmp.w #63,Ammo
  2166.  blt.s .NotMax
  2167.  move.w #63,Ammo
  2168. .NotMax:
  2169.  
  2170.  move.w Ammo,d0
  2171.  move.w OldAmmo,d2
  2172.  sub.w d0,d2
  2173.  beq.s .NoChange
  2174.  neg.w d2
  2175.  
  2176.  move.w #63,d3
  2177.  sub.w d0,d3
  2178.  
  2179.  move.l #Ammunition,a0
  2180.  lea (a0,d3.w*8),a0
  2181.  move.l #borders+5184+25*16+1,a1
  2182.  lsl.w #5,d3
  2183.  add.w d3,a1
  2184.  lea 2592(a1),a2
  2185.  
  2186. AmmoRise:
  2187.  move.b (a0)+,(a1)
  2188.  move.b (a0)+,8(a1)
  2189.  add.w #16,a1
  2190.  move.b (a0)+,(a2)
  2191.  move.b (a0)+,8(a2)
  2192.  add.w #16,a2
  2193.  move.b (a0)+,(a1)
  2194.  move.b (a0)+,8(a1)
  2195.  add.w #16,a1
  2196.  move.b (a0)+,(a2)
  2197.  move.b (a0)+,8(a2)
  2198.  add.w #16,a2
  2199.  subq #1,d2
  2200.  bgt.s AmmoRise
  2201.  
  2202.  move.w Ammo,OldAmmo
  2203.  
  2204.  rts 
  2205.  
  2206.  
  2207. LessAmmo: 
  2208.  move.w OldAmmo,d2
  2209.  sub.w d0,d2
  2210.  
  2211.  move.w #63,d3
  2212.  sub.w OldAmmo,d3
  2213.  
  2214.  move.l #borders++5184+25*16+1,a1
  2215.  asl.w #5,d3
  2216.  add.w d3,a1
  2217.  lea 2592(a1),a2
  2218.  
  2219. AmmoDrain:
  2220.  move.b #0,(a1)
  2221.  move.b #0,8(a1)
  2222.  move.b #0,(a2)
  2223.  move.b #0,8(a2)
  2224.  add.w #16,a1
  2225.  add.w #16,a2
  2226.  move.b #0,(a1)
  2227.  move.b #0,8(a1)
  2228.  move.b #0,(a2)
  2229.  move.b #0,8(a2)
  2230.  add.w #16,a1
  2231.  add.w #16,a2
  2232.  subq #1,d2
  2233.  bgt.s AmmoDrain
  2234.  
  2235.  move.w Ammo,OldAmmo
  2236.  
  2237.  rts 
  2238.  
  2239. nulop:
  2240.  move.w #$0010,$dff000+intreq
  2241.  rte
  2242.  
  2243. doanything: dc.w 0
  2244.  
  2245. end:
  2246.  
  2247.  move.l drawpt,d0
  2248.  move.l olddrawpt,drawpt
  2249.  move.l d0,olddrawpt
  2250.  move.l d0,$dff084
  2251.  
  2252.  clr.b doanything
  2253.  cmp.b #'b',Prefsfile+3
  2254.  bne.s .noback
  2255.  jsr mt_end
  2256. .noback
  2257.  tst.w Energy
  2258.  bgt.s wevewon
  2259.  
  2260.  move.l #gameover,mt_data
  2261.  st UseAllChannels
  2262.  clr.b reachedend
  2263.  jsr mt_init
  2264. playgameover:
  2265.  move.l #$dff000,a6
  2266. waitfortop2:
  2267.  btst.b #0,intreqrl(a6)
  2268.  beq waitfortop2
  2269.  move.w #$1,intreq(a6)
  2270.  
  2271.  jsr mt_music
  2272.  
  2273.  tst.b reachedend
  2274.  beq.s playgameover
  2275.  
  2276.  bra wevelost
  2277. wevewon:
  2278.  move.l #welldone,mt_data
  2279.  st UseAllChannels
  2280.  clr.b reachedend
  2281.  jsr mt_init
  2282. playwelldone:
  2283.  move.l #$dff000,a6
  2284. waitfortop3:
  2285.  btst.b #0,intreqrl(a6)
  2286.  beq waitfortop3
  2287.  move.w #$1,intreq(a6)
  2288.  
  2289.  jsr mt_music
  2290.  
  2291.  tst.b reachedend
  2292.  beq.s playwelldone
  2293.  
  2294.  
  2295. wevelost:
  2296.  jmp closeeverything 
  2297.  
  2298. do32:
  2299.  move.w #31,d7
  2300.  move.w #$180,d1
  2301. across:
  2302.  move.w d1,(a1)+
  2303.  move.w d1,(a3)+
  2304.  move.w #0,(a1)+
  2305.  move.w #0,(a3)+
  2306.  add.w #2,d1
  2307.  dbra d7,across
  2308.  rts
  2309.  
  2310.  
  2311.  
  2312. *************************************
  2313. * Set left and right clip values
  2314. *************************************
  2315.  
  2316.  
  2317.  
  2318. NEWsetlclip:
  2319.  move.l #OnScreen,a1
  2320.  move.l #Rotated,a2
  2321.  
  2322.  move.w (a0),d0
  2323.  bge.s .notignoreleft
  2324.  
  2325. ; move.l #0,(a6)
  2326.  
  2327.  bra .leftnotoktoclip
  2328. .notignoreleft:
  2329.  
  2330.  move.w 6(a2,d0*8),d3    ; left z val
  2331.  bgt.s .leftclipinfront
  2332.  addq #4,a0
  2333.  rts
  2334.  
  2335.  tst.w 6(a2,d0*8)
  2336.  bgt.s .leftnotoktoclip
  2337. .ignoreboth:
  2338. ; move.l #0,(a6)
  2339. ; move.l #96*65536,4(a6)
  2340.  move.w #0,leftclip
  2341.  move.w #96,rightclip
  2342.  addq #8,a6
  2343.  addq #8,a0
  2344.  rts
  2345.  
  2346. .leftclipinfront:
  2347.  move.w (a1,d0*2),d1    ; left x on screen
  2348.  move.w 2(a0),d2
  2349.  move.w (a1,d2.w*2),d2
  2350.  cmp.w d1,d2
  2351.  bgt.s .leftnotoktoclip
  2352.  
  2353. ; move.w d1,(a6)
  2354. ; move.w d3,2(a6)
  2355.  cmp.w leftclip(pc),d1
  2356.  ble.s .leftnotoktoclip
  2357.  move.w d1,leftclip
  2358. .leftnotoktoclip:
  2359.  
  2360.  addq #4,a0
  2361.  
  2362.  rts
  2363.  
  2364. NEWsetrclip
  2365.  move.l #OnScreen,a1
  2366.  move.l #Rotated,a2
  2367.  move.w (a0),d0
  2368.  bge.s .notignoreright
  2369. ; move.w #96,4(a6)
  2370. ; move.w #0,6(a6)
  2371.  move.w #0,d4
  2372.  bra .rightnotoktoclip
  2373. .notignoreright:
  2374.  move.w 6(a2,d0*8),d4    ; right z val
  2375.  bgt.s .rightclipinfront
  2376. ; move.w #96,4(a6)
  2377. ; move.w #0,6(a6)
  2378.  bra.s .rightnotoktoclip
  2379.  
  2380. .rightclipinfront:
  2381.  move.w (a1,d0*2),d1    ; right x on screen
  2382.  move.w 2(a0),d2
  2383.  move.w (a1,d2.w*2),d2
  2384.  cmp.w d1,d2
  2385.  blt.s .rightnotoktoclip
  2386. ; move.w d1,4(a6)
  2387. ; move.w d4,6(a6)
  2388.  
  2389.  cmp.w rightclip(pc),d1
  2390.  bge.s .rightnotoktoclip
  2391.  addq #1,d1
  2392.  move.w d1,rightclip
  2393. .rightnotoktoclip:
  2394.  addq #8,a6
  2395.  addq #4,a0
  2396.  rts
  2397.  
  2398. FIRSTsetlrclip:
  2399.  move.l #OnScreen,a1
  2400.  move.l #Rotated,a2
  2401.  
  2402.  move.w (a0)+,d0
  2403.  bge.s .notignoreleft
  2404.  bra .leftnotoktoclip
  2405. .notignoreleft:
  2406.  
  2407.  move.w 6(a2,d0*8),d3    ; left z val
  2408.  bgt.s .leftclipinfront
  2409.  
  2410.  move.w (a0),d0
  2411.  blt.s .ignoreboth
  2412.  tst.w 6(a2,d0*8)
  2413.  bgt.s .leftnotoktoclip
  2414. .ignoreboth
  2415.  move.w #96,rightclip
  2416.  move.w #0,leftclip
  2417.  addq #2,a0
  2418.  rts
  2419.  
  2420. .leftclipinfront:
  2421.  move.w (a1,d0*2),d1    ; left x on screen
  2422.  cmp.w leftclip(pc),d1
  2423.  ble.s .leftnotoktoclip
  2424.  move.w d1,leftclip
  2425. .leftnotoktoclip:
  2426.  
  2427.  move.w (a0)+,d0
  2428.  bge.s .notignoreright
  2429.  move.w #0,d4
  2430.  bra .rightnotoktoclip
  2431. .notignoreright:
  2432.  move.w 6(a2,d0*8),d4    ; right z val
  2433.  ble.s .rightnotoktoclip
  2434.  
  2435. .rightclipinfront:
  2436.  move.w (a1,d0*2),d1    ; right x on screen
  2437.  cmp.w rightclip(pc),d1
  2438.  bge.s .rightnotoktoclip
  2439.  addq #1,d1
  2440.  move.w d1,rightclip
  2441. .rightnotoktoclip:
  2442.  
  2443. ; move.w leftclip,d0
  2444. ; move.w rightclip,d1
  2445. ; cmp.w d0,d1
  2446. ; bge.s .noswap
  2447. ; move.w #96,rightclip
  2448. ; move.w #0,leftclip
  2449. ;.noswap:
  2450.  
  2451.  rts
  2452.  
  2453.  
  2454. leftclip2: dc.w 0
  2455. rightclip2: dc.w 0
  2456. ZoneBright: dc.w 0
  2457.  
  2458. npolys: dc.w 0
  2459.  
  2460. PLR1_fire: dc.b 0
  2461. PLR2_fire: dc.b 0
  2462.  
  2463. turnleftright:
  2464.  
  2465.  move.w PLR2_angspd,d1
  2466.  move.w PLR2_angpos,d0
  2467.  
  2468.  move.w #120,d7
  2469.  muls TempFrames,d7
  2470.  
  2471.  move.w d1,d2
  2472.  neg.w d2
  2473.  cmp.w d7,d2
  2474.  ble.s okslow
  2475.  move.w d7,d2
  2476. okslow
  2477.  neg.w d7
  2478.  cmp.w d7,d2
  2479.  bge.s okslo
  2480.  move.w d7,d2
  2481. okslo:
  2482.  
  2483.  asr.w #1,d7
  2484.  
  2485.  btst #1,$d(a6)
  2486.  sne d3
  2487.  beq.s notleft
  2488.  move.w d7,d2
  2489.  neg.w d2
  2490. ; tst.w d1
  2491. ; bge.s notleft
  2492. ; moveq #0,d1
  2493. notleft
  2494.  
  2495.  btst #1,$c(a6)
  2496.  sne d4
  2497.  beq.s notright
  2498.  move.w d7,d2
  2499. ; tst.w d1
  2500. ; ble.s notright
  2501. ; moveq #0,d1
  2502. notright
  2503.  
  2504.  move.w #0,PLR2_ForwardSpd
  2505.  
  2506.  btst #0,$dff00c
  2507.  sne d5
  2508.  eor.b d4,d5
  2509.  beq.s notup
  2510.  move.w TempFrames,d7
  2511.  neg.w d7
  2512.  asl.w #2,d7
  2513.  move.w d7,PLR2_ForwardSpd
  2514. notup:
  2515.  
  2516.  btst #0,$dff00d
  2517.  sne d5
  2518.  eor.b d3,d5
  2519.  beq.s notdown
  2520.  move.w TempFrames,d7
  2521.  asl.w #2,d7
  2522.  move.w d7,PLR2_ForwardSpd
  2523. notdown:
  2524.  
  2525.  add.w d2,d1
  2526.  cmp.w #-360,d1
  2527.  bge.s okspdlft
  2528.  move.w #-360,d1
  2529. okspdlft:
  2530.  cmp.w #360,d1
  2531.  ble.s okspdrgt
  2532.  move.w #360,d1
  2533. okspdrgt:
  2534.  
  2535.  move.w d1,PLR2_angspd
  2536.  add.w d1,d0
  2537.  and.w #8191,d0
  2538.  move.w d0,PLR2_angpos
  2539.  rts
  2540.  
  2541. *****************************************************
  2542.  
  2543.  include "ab3:source/ObjectMove"
  2544.  
  2545. pastdata:
  2546. ***********************************
  2547. * This routine animates brightnesses.
  2548.  
  2549.  
  2550. liftpt: dc.l liftanimtab
  2551.  
  2552. brightpt:
  2553.  dc.l brightanimtab
  2554.  
  2555. protinit:
  2556.  dc.l -$4e7a0002
  2557.  dc.l -$00800000
  2558.  dc.l -$00014e7b
  2559.  dc.l -$00024e7a
  2560.  dc.l -$00020280
  2561.  dc.l -$fffffffd
  2562.  dc.l -$4e7b0002
  2563.  
  2564. ; CACHE_ON d0
  2565. ; CACHE_FREEZE_OFF d0
  2566.  move.l #endprot-2,a1
  2567.  move.l a1,a2
  2568.  move.w #$4e75,startpass
  2569.  move.l #test+123453986,a4
  2570.  move.l #DummyAdds,a3
  2571.  move.l #protcheck-34567,d0
  2572.  add.l #34567,d0
  2573.  move.l #backfromprot,-(a7)
  2574.  move.l d0,-(a7)
  2575.  move.l #protcheck-7777634,a0
  2576.  add.l #7777634,a0
  2577.  move.l #(endprot-protcheck)/2-1,d0
  2578. delprot:
  2579.  eor.w #$5726,(a0)+
  2580.  dbra d0,delprot
  2581.  move.l #0,d0
  2582.  rts
  2583. backfromprot:
  2584.  CACHE_FREEZE_ON d0
  2585.  move.l #protcheck-2345634,a0
  2586.  add.l #2345634,a0
  2587.  move.l #(endprot-protcheck)/2-1,d0
  2588. delprot2:
  2589.  not.w (a0)+
  2590.  dbra d0,delprot2
  2591.  lea protinit(pc),a0
  2592.  move.l #$4e754e75,d1
  2593. thisdel2:
  2594.  move.l d1,(a0)+
  2595.  bra thisdel2
  2596.  
  2597. liftanim:
  2598.  rts
  2599.  
  2600. ******************************
  2601.  include "ab3:source/Anims"
  2602. ******************************
  2603. startpass:
  2604.  include "ab3:source/password_reloc.s"
  2605. endpass:
  2606.  
  2607. rotanimpt: dc.w 0
  2608. xradd: dc.w 5
  2609. yradd: dc.w 8
  2610. xrpos: dc.w 320
  2611. yrpos: dc.w 320
  2612.  
  2613. rotanim:
  2614.  rts
  2615.  
  2616. option:
  2617.  dc.l 0,0
  2618.  
  2619. ********** WALL STUFF *******************************
  2620.  
  2621.  include "AB3:source/wallroutine3.chipmem"
  2622.  
  2623. *****************************************************
  2624.  
  2625. ******************************************
  2626. * floor polygon
  2627.  
  2628. numsidestd: dc.w 0
  2629. bottomline: dc.w 0
  2630.  
  2631. NewCornerBuff:
  2632.  ds.l 100
  2633.  
  2634. itsafloordraw:
  2635.  
  2636. * If D0 =1 then its a floor otherwise (=2) it's
  2637. * a roof.
  2638.  
  2639.  move.w #0,above
  2640.  move.w (a0)+,d6    ; ypos of poly
  2641.  
  2642.  move.w leftclip(pc),d7
  2643.  cmp.w rightclip(pc),d7
  2644.  bge.s dontdrawreturn
  2645.  
  2646.  move.w botclip,d7
  2647.  sub.w #40,d7
  2648.  ble.s dontdrawreturn
  2649.  sub.w flooryoff,d6
  2650.  bgt.s below
  2651.  blt.s aboveplayer
  2652. dontdrawreturn:
  2653.  move.w (a0)+,d6    ; sides-1
  2654.  add.w d6,d6
  2655.  add.w d6,a0
  2656.  add.w #4+6,a0
  2657.  rts
  2658. aboveplayer:
  2659.  cmp.w #2,d0
  2660.  bne.s dontdrawreturn
  2661.  move.w #40,d7
  2662.  sub.w topclip,d7 
  2663.  blt.s dontdrawreturn
  2664.  move.w #1,d0
  2665.  move.w d0,above
  2666.  neg.w d6
  2667. below:
  2668.  cmp.w #1,d0
  2669.  bne.s dontdrawreturn
  2670.  move.w d6,distaddr
  2671.  muls #64,d6
  2672.  move.l d6,ypos
  2673.  divs d7,d6        ; zpos of bottom
  2674.             ; visible line
  2675.  move.w d6,minz
  2676.  move.w d7,bottomline
  2677.  
  2678. ; Go round each point finding out
  2679. ; if it should be visible or not.
  2680.  
  2681.  move.l a0,-(a7)
  2682.  
  2683.  move.w (a0)+,d7    ; number of sides
  2684.  move.l #Rotated,a1
  2685.  move.l #OnScreen,a2
  2686.  move.l #NewCornerBuff,a3
  2687.  moveq #0,d4
  2688.  moveq #0,d5
  2689.  moveq #0,d6
  2690.  clr.b anyclipping
  2691.  
  2692. cornerprocessloop:
  2693.  
  2694.  move.w (a0)+,d0
  2695.  move.w 6(a1,d0.w*8),d1
  2696.  ble  .canttell
  2697.  
  2698.  move.w (a2,d0.w*2),d3
  2699.  cmp.w leftclip,d3
  2700.  bgt.s .nol
  2701.  st d4
  2702.  st anyclipping
  2703.  bra.s .nos
  2704. .nol:
  2705.  cmp.w rightclip,d3
  2706.  blt.s .nor
  2707.  st d6
  2708.  st anyclipping
  2709.  bra.s .nos
  2710. .nor:
  2711.  st d5
  2712. .nos:
  2713.  bra .cantell
  2714.  
  2715. .canttell:
  2716.  st d5
  2717.  st anyclipping
  2718.  
  2719. .cantell:
  2720.  
  2721.  
  2722.  dbra d7,cornerprocessloop
  2723.  
  2724.  move.l (a7)+,a0
  2725.  tst.b d5
  2726.  bne.s somefloortodraw
  2727.  eor.b d4,d6
  2728.  bne dontdrawreturn
  2729.  
  2730. somefloortodraw:
  2731.  
  2732.  move.w #80,top
  2733.  move.w #-1,bottom
  2734.  move.w #0,drawit
  2735.  move.l #Rotated,a1
  2736.  move.l #OnScreen,a2
  2737.  move.w (a0)+,d7    ; no of sides
  2738. sideloop:
  2739.  move.w minz,d6
  2740.  move.w (a0)+,d1
  2741.  move.w (a0),d3
  2742.  move.w 6(a1,d1*8),d4    ;first z
  2743.  cmp.w d6,d4
  2744.  bgt firstinfront
  2745.  move.w 6(a1,d3*8),d5    ; sec z
  2746.  cmp.w d6,d5
  2747.  ble bothbehind
  2748. ** line must be on left and partially behind.
  2749.  sub.w d5,d4
  2750.  move.l (a1,d1*8),d0
  2751.  sub.l (a1,d3*8),d0
  2752.  asr.l #7,d0
  2753.  sub.w d5,d6
  2754.  muls d6,d0    ; new x coord
  2755.  divs d4,d0
  2756.  ext.l d0
  2757.  asl.l #7,d0
  2758.  
  2759.  add.l (a1,d3*8),d0
  2760.  move.w minz,d4
  2761.  move.w (a2,d3*2),d2
  2762.  divs d4,d0
  2763.  add.w #47,d0
  2764.  move.l ypos,d3
  2765.  divs d5,d3
  2766.  move.w bottomline,d1 
  2767.  bra lineclipped
  2768.  
  2769. firstinfront:
  2770.  move.w 6(a1,d3*8),d5    ; sec z
  2771.  cmp.w d6,d5
  2772.  bgt bothinfront
  2773. ** line must be on right and partially behind.
  2774.  sub.w d4,d5    ; dz
  2775.  move.l (a1,d3*8),d2
  2776.  sub.l (a1,d1*8),d2    ; dx
  2777.  sub.w d4,d6
  2778.  asr.l #7,d2
  2779.  muls d6,d2    ; new x coord
  2780.  divs d5,d2
  2781.  ext.l d2
  2782.  asl.l #7,d2
  2783.  add.l (a1,d1*8),d2
  2784.  move.w minz,d5
  2785.  move.w (a2,d1*2),d0
  2786.  divs d5,d2
  2787.  add.w #47,d2
  2788.  move.l ypos,d1
  2789.  divs d4,d1
  2790.  move.w bottomline,d3 
  2791.  bra lineclipped
  2792.  
  2793. bothinfront:
  2794.  
  2795. * Also, usefully enough, both are on-screen
  2796. * so no bottom clipping is needed.
  2797.  
  2798.  move.w (a2,d1*2),d0    ; first x
  2799.  move.w (a2,d3*2),d2    ; second x
  2800.  move.l ypos,d1
  2801.  move.l d1,d3
  2802.  divs d4,d1        ; first y
  2803.  divs d5,d3        ; second y
  2804. lineclipped:
  2805.  move.l #rightsidetab,a3
  2806.  cmp.w d1,d3
  2807.  beq lineflat
  2808.  st drawit
  2809.  bgt lineonright
  2810.  move.l #leftsidetab,a3
  2811.  exg d1,d3
  2812.  exg d0,d2
  2813.  
  2814.  lea (a3,d1*2),a3
  2815.  
  2816.  cmp.w top(pc),d1
  2817.  bge.s .nonewtop
  2818.  move.w d1,top
  2819. .nonewtop:
  2820.  cmp.w bottom(pc),d3
  2821.  ble.s .nonewbot
  2822.  move.w d3,bottom
  2823. .nonewbot:
  2824.  
  2825.  sub.w d1,d3    ; dy
  2826.  sub.w d0,d2    ; dx
  2827.  
  2828.  blt .linegoingleft
  2829.  sub.w #1,d0
  2830.  
  2831.  ext.l d2
  2832.  divs d3,d2
  2833.  move.w d2,d6
  2834.  swap d2
  2835.  
  2836. ; moveq #0,d6
  2837. ; sub.w d3,d2
  2838. ; blt.s .noco
  2839. ;.makeco
  2840. ; addq #1,d6
  2841. ; sub.w d3,d2
  2842. ; bge.s .makeco
  2843. ;.noco
  2844. ; add.w d3,d2
  2845.  
  2846.  move.w d3,d4
  2847.  move.w d3,d5
  2848.  subq #1,d5
  2849.  move.w d6,d1
  2850.  addq #1,d1
  2851.  
  2852. .pixlopright:
  2853.  move.w d0,(a3)+
  2854.  sub.w d2,d4
  2855.  bge.s .nobigstep
  2856.  add.w d1,d0
  2857.  add.w d3,d4
  2858.  dbra d5,.pixlopright
  2859.  bra lineflat
  2860. .nobigstep
  2861.  add.w d6,d0
  2862.  dbra d5,.pixlopright
  2863.  bra lineflat
  2864.  
  2865. .linegoingleft:
  2866.  
  2867.  sub.w #1,d0
  2868.  
  2869.  neg.w d2
  2870.  
  2871.  ext.l d2
  2872.  divs d3,d2
  2873.  move.w d2,d6
  2874.  swap d2
  2875.  
  2876.  
  2877. ; moveq #0,d6
  2878. ; sub.w d3,d2
  2879. ; blt.s .nocol
  2880. ;.makecol
  2881. ; addq #1,d6
  2882. ; sub.w d3,d2
  2883. ; bge.s .makecol
  2884. ;.nocol
  2885. ; add.w d3,d2
  2886.  
  2887.  
  2888.  
  2889.  move.w d3,d4
  2890.  move.w d3,d5
  2891.  subq #1,d5
  2892.  
  2893.  move.w d6,d1
  2894.  addq #1,d1
  2895.  
  2896. .pixlopleft:
  2897.  sub.w d2,d4
  2898.  bge.s .nobigstepl
  2899.  sub.w d1,d0
  2900.  add.w d3,d4
  2901.  move.w d0,(a3)+
  2902.  dbra d5,.pixlopleft
  2903.  bra lineflat
  2904.  
  2905. .nobigstepl
  2906.  sub.w d6,d0
  2907.  move.w d0,(a3)+
  2908.  dbra d5,.pixlopleft
  2909.  bra lineflat
  2910.  
  2911. lineonright:
  2912.  
  2913.  lea (a3,d1*2),a3
  2914.  
  2915.  cmp.w top(pc),d1
  2916.  bge.s .nonewtop
  2917.  move.w d1,top
  2918. .nonewtop:
  2919.  cmp.w bottom(pc),d3
  2920.  ble.s .nonewbot
  2921.  move.w d3,bottom
  2922. .nonewbot:
  2923.  
  2924.  sub.w d1,d3    ; dy
  2925.  sub.w d0,d2    ; dx
  2926.  blt .linegoingleft
  2927. ; addq #1,d0
  2928.  ext.l d2
  2929.  divs d3,d2
  2930.  move.w d2,d6
  2931.  swap d2
  2932.  
  2933. ; moveq #0,d6
  2934. ; sub.w d3,d2
  2935. ; blt.s .noco
  2936. ;.makeco
  2937. ; addq #1,d6
  2938. ; sub.w d3,d2
  2939. ; bge.s .makeco
  2940. ;.noco
  2941. ; add.w d3,d2
  2942.  
  2943.  move.w d3,d4
  2944.  move.w d3,d5
  2945.  subq #1,d5
  2946.  move.w d6,d1
  2947.  addq #1,d1
  2948.  
  2949. .pixlopright:
  2950.  sub.w d2,d4
  2951.  bge.s .nobigstep
  2952.  add.w d1,d0
  2953.  add.w d3,d4
  2954.  move.w d0,(a3)+
  2955.  dbra d5,.pixlopright
  2956.  bra lineflat
  2957.  
  2958. .nobigstep
  2959.  add.w d6,d0
  2960.  move.w d0,(a3)+
  2961.  dbra d5,.pixlopright
  2962.  bra lineflat
  2963.  
  2964. .linegoingleft:
  2965. ; addq #1,d0
  2966.  neg.w d2
  2967.  
  2968.  ext.l d2
  2969.  divs d3,d2
  2970.  move.w d2,d6
  2971.  swap d2
  2972.  
  2973.  
  2974. ; moveq #0,d6
  2975. ; sub.w d3,d2
  2976. ; blt.s .nocol
  2977. ;.makecol
  2978. ; addq #1,d6
  2979. ; sub.w d3,d2
  2980. ; bge.s .makecol
  2981. ;.nocol
  2982. ; add.w d3,d2
  2983.  
  2984.  move.w d3,d4
  2985.  move.w d3,d5
  2986.  subq #1,d5
  2987.  move.w d6,d1
  2988.  addq #1,d1
  2989.  
  2990. .pixlopleft:
  2991.  move.w d0,(a3)+
  2992.  sub.w d2,d4
  2993.  bge.s .nobigstepl
  2994.  sub.w d1,d0
  2995.  add.w d3,d4
  2996.  dbra d5,.pixlopleft
  2997.  bra lineflat
  2998.  
  2999. .nobigstepl
  3000.  sub.w d6,d0
  3001.  dbra d5,.pixlopleft
  3002.  
  3003. lineflat:
  3004.  
  3005. bothbehind:
  3006.  dbra d7,sideloop
  3007.  
  3008. pastsides:
  3009.  
  3010.  
  3011.  addq #2,a0
  3012.  
  3013.  move.w #104*4,linedir
  3014.  move.l frompt,a6
  3015.  add.l #104*4*41,a6
  3016.  move.w (a0)+,scaleval
  3017.  move.w (a0)+,whichtile
  3018.  move.w (a0)+,d6
  3019.  add.w ZoneBright,d6
  3020.  move.w d6,lighttype
  3021.  move.w above(pc),d6
  3022.  beq groundfloor
  3023. * on ceiling:
  3024.  move.w #-104*4,linedir
  3025.  suba.w #104*4,a6
  3026. groundfloor:
  3027.  
  3028.  move.w xoff,d6
  3029.  move.w zoff,d7
  3030.  add.w xwobxoff,d7
  3031.  add.w xwobzoff,d6
  3032.  move.w scaleval(pc),d3
  3033.  beq.s .samescale
  3034.  bgt.s .scaledown
  3035.  neg.w d3
  3036.  asr.l d3,d7
  3037.  asr.l d3,d6
  3038.  bra.s .samescale
  3039. .scaledown:
  3040.  asl.l d3,d6
  3041.  asl.l d3,d7
  3042. .samescale
  3043.  asl.w #8,d7
  3044.  move.w d6,sxoff
  3045.  move.w d7,szoff
  3046.  bra pastscale 
  3047.  
  3048.  asr.l #3,d1
  3049.  asr.l #3,d2
  3050.  asr.l #2,d1
  3051.  asr.l #2,d2
  3052.  asr.l #1,d1
  3053.  asr.l #1,d2
  3054. scaleprogfrom
  3055.  nop
  3056.  nop
  3057.  asl.l #1,d1
  3058.  asl.l #1,d2
  3059.  asl.l #2,d1
  3060.  asl.l #2,d2
  3061.  asl.l #3,d1
  3062.  asl.l #3,d2
  3063.  
  3064. top: dc.w 0
  3065. bottom: dc.w 0
  3066. ypos: dc.l 0
  3067. nfloors: dc.w 0
  3068. lighttype: dc.w 0
  3069. above: dc.w 0 
  3070. linedir: dc.w 0
  3071. distaddr: dc.w 0
  3072.  
  3073. minz: dc.w 0
  3074. leftsidetab:
  3075.  ds.w 80
  3076. rightsidetab:
  3077.  ds.w 80
  3078. leftsideclip:
  3079.  ds.w 80
  3080. rightsideclip:
  3081.  ds.w 80
  3082.  
  3083. movespd: dc.w 0
  3084. largespd: dc.l 0
  3085.  
  3086. pastscale:
  3087.  
  3088.  tst.b drawit(pc)
  3089.  beq dontdrawfloor
  3090.  
  3091.  move.l a0,-(a7)
  3092.  
  3093.  move.l #leftsidetab,a4
  3094.  move.w top(pc),d1
  3095.  move.w bottom(pc),d7
  3096.  tst.w above
  3097.  beq.s clipfloor
  3098.  
  3099.  move.w #40,d3
  3100.  move.w d3,d4
  3101.  sub.w topclip,d3
  3102.  sub.w botclip,d4
  3103.  cmp.w d3,d1
  3104.  bge predontdrawfloor
  3105.  cmp.w d4,d7
  3106.  blt predontdrawfloor
  3107.  cmp.w d4,d1
  3108.  bge.s .nocliptoproof
  3109.  move.w d4,d1
  3110. .nocliptoproof
  3111.  cmp.w d3,d7
  3112.  blt doneclip
  3113.  move.w d3,d7
  3114.  bra doneclip
  3115.  
  3116. clipfloor:
  3117.  move.w botclip,d4
  3118.  sub.w #40,d4
  3119.  cmp.w d4,d1
  3120.  bge predontdrawfloor
  3121.  move.w topclip,d3
  3122.  sub.w #40,d3
  3123.  cmp.w d3,d1
  3124.  bge.s .nocliptopfloor
  3125.  move.w d3,d1
  3126. .nocliptopfloor 
  3127.  cmp.w d3,d7
  3128.  ble predontdrawfloor
  3129.  cmp.w d4,d7
  3130.  blt.s .noclipbotfloor
  3131.  move.w d4,d7
  3132. .noclipbotfloor:
  3133.  
  3134. doneclip:
  3135.  
  3136.  lea (a4,d1*2),a4
  3137. ; move.l #dists,a2
  3138.  move.w distaddr,d0
  3139.  muls #64,d0
  3140.  move.l d0,a2
  3141. ; muls #25,d0
  3142. ; adda.w d0,a2
  3143. ; lea (a2,d1*2),a2
  3144.  sub.w d1,d7
  3145.  ble predontdrawfloor 
  3146.  move.w d1,d0
  3147.  bne.s .notzero
  3148.  moveq #1,d0
  3149. .notzero
  3150.  muls linedir,d1
  3151.  add.l d1,a6
  3152.  move.l #floorscalecols,a1
  3153.  move.l LineToUse,a5
  3154.  
  3155.  tst.b anyclipping
  3156.  beq dofloornoclip
  3157.  
  3158. dofloor:
  3159. ; move.w (a2)+,d0
  3160.  move.w leftclip(pc),d3
  3161.  move.w rightclip(pc),d4
  3162.  move.w rightsidetab-leftsidetab(a4),d2
  3163.  addq #1,d2
  3164.  cmp.w d3,d2
  3165.  ble.s nodrawline
  3166.  cmp.w d4,d2
  3167.  ble.s noclipright
  3168.  move.w d4,d2
  3169. noclipright:
  3170.  move.w (a4),d1
  3171.  cmp.w d4,d1
  3172.  bge.s nodrawline
  3173.  cmp.w d3,d1
  3174.  bge.s noclipleft
  3175.  move.w d3,d1
  3176. noclipleft:
  3177.  cmp.w d1,d2
  3178.  ble.s nodrawline
  3179.  
  3180.  move.w d1,leftedge
  3181.  move.w d2,rightedge
  3182.  
  3183.  move.l a6,a3
  3184.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  3185.  move.l a2,d7
  3186.  divs d0,d7
  3187.  move.w d7,d0
  3188.  jsr (a5)
  3189.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  3190. nodrawline
  3191.  adda.w linedir(pc),a6
  3192.  addq #2,a4
  3193.  addq #1,d0
  3194.  subq #1,d7
  3195.  bgt dofloor
  3196.  
  3197. predontdrawfloor
  3198.  move.l (a7)+,a0
  3199.  
  3200. dontdrawfloor:
  3201.  
  3202.  CACHE_FREEZE_OFF d2
  3203.  rts
  3204.  
  3205. anyclipping: dc.w 0
  3206.  
  3207. dofloornoclip:
  3208. ; move.w (a2)+,d0
  3209.  move.w rightsidetab-leftsidetab(a4),d2
  3210.  addq #1,d2
  3211.  move.w (a4)+,leftedge
  3212.  move.w d2,rightedge
  3213.  
  3214.  move.l a6,a3
  3215.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  3216.  move.l a2,d7
  3217.  divs d0,d7
  3218.  move.w d7,d0
  3219.  jsr (a5)
  3220.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  3221.  adda.w linedir(pc),a6
  3222.  addq #1,d0
  3223.  subq #1,d7
  3224.  bgt dofloornoclip
  3225.  
  3226.  bra predontdrawfloor
  3227.  
  3228.  
  3229. dists:
  3230. ; incbin "floordists"
  3231. drawit: dc.w 0
  3232.  
  3233. LineToUse: dc.l 0
  3234.  
  3235. ***************************
  3236. * Right then, time for the floor
  3237. * routine...
  3238. * For test purposes, give it
  3239. * a3 = point to screen
  3240. * d0= z distance away
  3241. * and sinval+cosval must be set up.
  3242. ***************************
  3243.  
  3244. leftedge: dc.w 0
  3245. rightedge: dc.w 0
  3246.  
  3247. rndpt: dc.l rndtab
  3248.  
  3249. WaterFloorLine:
  3250.  
  3251.  CACHE_OFF d2
  3252.  
  3253.  move.l rndpt,a2
  3254.  move.w (a2)+,d1
  3255.  move.w (a2)+,d2
  3256.  move.w (a2)+,d3
  3257.  cmp.l #endrnd-4,a2
  3258.  blt.s okrnd
  3259.  suba.w #98,a2
  3260. okrnd: 
  3261.  move.l a2,rndpt
  3262.  
  3263.  asr.w #6,d0
  3264.  move.w d0,d1
  3265.  move.w d0,d2
  3266.  move.w d0,d3
  3267.  move.l clipd(pc,d1.w*4),d1
  3268.  move.l clipd(pc,d2.w*4),d2
  3269.  move.l clipd(pc,d3.w*4),d3
  3270.  bra pcli
  3271.  
  3272.  dc.l 0
  3273. clipd:
  3274.  dc.l 0
  3275.  dc.l 512
  3276.  dc.l 512*2
  3277.  dc.l 512*3
  3278.  dc.l 512*4
  3279.  dc.l 512*5
  3280.  dc.l 512*6
  3281.  dc.l 512*7
  3282.  dc.l 512*8
  3283.  dc.l 512*9
  3284.  dc.l 512*10
  3285.  dc.l 512*11
  3286.  dc.l 512*12
  3287.  dc.l 512*13
  3288.  dc.l 512*14
  3289.  dc.l 512*15
  3290.  dc.l 512*15
  3291.  dc.l 512*15
  3292.  dc.l 512*15
  3293.  dc.l 512*15
  3294.  dc.l 512*15
  3295.  dc.l 512*15
  3296.  dc.l 512*15
  3297.  dc.l 512*15
  3298.  dc.l 512*15
  3299.  dc.l 512*15
  3300.  dc.l 512*15
  3301.  
  3302. pcli:
  3303.  
  3304.  move.l #brightentab,a2
  3305.  move.l a2,a4
  3306.  move.l a4,a5
  3307.  add.l d1,a2
  3308.  add.l d2,a4
  3309.  add.l d3,a5
  3310.  
  3311.  move.l #doacrossline,a1
  3312.  move.w leftedge(pc),d1
  3313.  move.w rightedge(pc),d2
  3314.  sub.w d1,d2
  3315.  move.w time(pc,d1.w*2),d1
  3316.  move.w time(pc,d2.w*2),d2
  3317.  lea (a1,d1.w),a1
  3318.  move.w (a1,d2.w),d4
  3319.  move.w #$4e75,(a1,d2.w)
  3320.  
  3321.  moveq #0,d0
  3322.  jsr (a1)
  3323.  move.w d4,(a1,d2.w)
  3324.  
  3325.  CACHE_ON d2
  3326.  
  3327.  rts
  3328.  
  3329. time:
  3330. val SET 0
  3331.  REPT 100
  3332.  dc.w val
  3333. val SET val+10
  3334.  ENDR
  3335.  
  3336. storeit: dc.l 0
  3337.  
  3338. doacrossline:
  3339.  incbin "Doacrossline"
  3340.  rts
  3341.  
  3342. dst: dc.w 0
  3343.  
  3344. FloorLine:
  3345.  
  3346.  move.l #floortile,a0
  3347.  adda.w whichtile,a0
  3348.  move.w lighttype,d1
  3349.  
  3350.  move.w d0,dst
  3351.  
  3352.  move.w d0,d2
  3353. *********************
  3354. * Old version
  3355.  asr.w #6,d2
  3356.  add.w #5,d1
  3357. *********************
  3358. ; asr.w #3,d2
  3359. ; sub.w #4,d2
  3360. ; cmp.w #6,d2
  3361. ; blt.s flbrbr
  3362. ; move.w #6,d2
  3363. ;flbrbr:
  3364. *********************
  3365.  add.w d2,d1
  3366.  bge.s .fixedbright
  3367.  moveq #0,d1
  3368. .fixedbright:
  3369.  cmp.w #28,d1
  3370.  ble.s .smallbright
  3371.  move.w #28,d1
  3372. .smallbright:
  3373.  lea floorscalecols,a1
  3374.  add.l floorbright(pc,d1.w*4),a1
  3375.  bra pastfloorbright
  3376.  
  3377. ConstCol: dc.w 0
  3378.  
  3379. BumpLine:
  3380.  
  3381.  tst.b smoothbumps
  3382.  beq.s Chunky
  3383.  
  3384.  move.l #SmoothTile,a0
  3385.  lea Smoothscalecols,a1
  3386.  bra pastast
  3387.  
  3388. Chunky:
  3389.  
  3390.  moveq #0,d2
  3391.  move.l #Bumptile,a0
  3392.  move.w whichtile,d2
  3393.  adda.w d2,a0
  3394.  ror.l #2,d2
  3395.  lsr.w #6,d2
  3396.  rol.l #2,d2
  3397.  and.w #15,d2
  3398.  move.l #ConstCols,a1
  3399.  move.w (a1,d2.w*2),ConstCol
  3400.  lea Bumpscalecols,a1
  3401.  
  3402. pastast:
  3403.  move.w lighttype,d1
  3404.  
  3405.  move.w d0,dst
  3406.  
  3407.  move.w d0,d2
  3408. *********************
  3409. * Old version
  3410.  asr.w #6,d2
  3411.  add.w #5,d1
  3412. *********************
  3413. ; asr.w #3,d2
  3414. ; sub.w #4,d2
  3415. ; cmp.w #6,d2
  3416. ; blt.s flbrbr
  3417. ; move.w #6,d2
  3418. ;flbrbr:
  3419. *********************
  3420.  add.w d2,d1
  3421.  bge.s .fixedbright
  3422.  moveq #0,d1
  3423. .fixedbright:
  3424.  cmp.w #28,d1
  3425.  ble.s .smallbright
  3426.  move.w #28,d1
  3427. .smallbright:
  3428.  add.l floorbright(pc,d1.w*4),a1
  3429.  bra pastfloorbright
  3430.  
  3431.  
  3432. floorbright:
  3433.  dc.l 512*0
  3434.  dc.l 512*1
  3435.  dc.l 512*1
  3436.  dc.l 512*2
  3437.  dc.l 512*2
  3438.  
  3439.  dc.l 512*3
  3440.  dc.l 512*3
  3441.  dc.l 512*4
  3442.  dc.l 512*4
  3443.  dc.l 512*5
  3444.  
  3445.  dc.l 512*5
  3446.  dc.l 512*6
  3447.  dc.l 512*6
  3448.  dc.l 512*7
  3449.  dc.l 512*7
  3450.  
  3451.  dc.l 512*8
  3452.  dc.l 512*8
  3453.  dc.l 512*9
  3454.  dc.l 512*9
  3455.  dc.l 512*10
  3456.  
  3457.  dc.l 512*10
  3458.  dc.l 512*11
  3459.  dc.l 512*11
  3460.  dc.l 512*12
  3461.  dc.l 512*12
  3462.  
  3463.  dc.l 512*13
  3464.  dc.l 512*13
  3465.  dc.l 512*14
  3466.  dc.l 512*14
  3467.  
  3468. widthleft: dc.w 0
  3469. scaleval: dc.w 0
  3470. sxoff: dc.w 0
  3471. szoff: dc.w 0
  3472. xoff34: dc.w 0
  3473. zoff34: dc.w 0
  3474. scosval: dc.w 0
  3475. ssinval: dc.w 0
  3476.  
  3477.  
  3478. floorsetbright:
  3479.  move.l #walltiles,a0
  3480.  
  3481. pastfloorbright
  3482.  
  3483.  
  3484.  move.w d0,d1
  3485.  muls cosval,d1    ; change in x across whole width
  3486.  move.w d0,d2
  3487.  muls sinval,d2    ; change in z across whole width
  3488.  neg.l d2
  3489. scaleprog:
  3490.  move.w scaleval(pc),d3
  3491.  beq.s .samescale
  3492.  bgt.s .scaledown
  3493.  neg.w d3
  3494.  asr.l d3,d1
  3495.  asr.l d3,d2
  3496.  bra.s .samescale
  3497. .scaledown:
  3498.  asl.l d3,d1
  3499.  asl.l d3,d2
  3500. .samescale
  3501.  
  3502.  move.l d1,d3 ;    z cos
  3503.  move.l d3,d6
  3504.  move.l d3,d5
  3505.  asr.l #1,d6
  3506.  add.l d6,d3
  3507.  asr.l #1,d3
  3508.  
  3509.  move.l d2,d4    ; z sin
  3510.  move.l d4,d6
  3511.  asr.l #1,d6
  3512.  add.l d4,d6
  3513.  add.l d3,d4
  3514.  neg.l d4    ; start x
  3515.  
  3516.  asr.l #1,d6    ; zsin/2
  3517.  sub.l d6,d5    ; start z
  3518.  
  3519.  move.w d4,startsmoothx
  3520.  move.w d5,startsmoothz
  3521.  
  3522.  swap d4
  3523.  asr.l #8,d5
  3524.  add.w szoff,d5
  3525.  add.w sxoff,d4
  3526.  and.w #63,d4
  3527.  and.w #63*256,d5
  3528.  move.b d4,d5
  3529.  
  3530.  asr.l #6,d1
  3531.  asr.l #6,d2
  3532.  move.w leftedge(pc),d6
  3533.  beq.s nomultleft
  3534.  
  3535.  move.l d1,d3
  3536.  asr.l #6,d3
  3537.  muls d6,d3
  3538.  asl.l #6,d3
  3539.  swap d3
  3540.  add.b d3,d5
  3541.  
  3542.  move.l d2,d3
  3543.  asr.l #6,d3
  3544.  muls d6,d3
  3545.  asl.l #6,d3
  3546.  swap d3
  3547.  lsl.w #8,d3
  3548.  add.w d3,d5
  3549.  
  3550. nomultleft:
  3551.  
  3552.  move.w d1,a4
  3553.  move.w d2,a5
  3554.  asr.l #8,d2
  3555.  and.w #%0011111100000000,d2
  3556.  swap d1
  3557.  add.w d1,d2
  3558.  move.w #%11111100111111,d1
  3559.  and.w d1,d5
  3560.  swap d5
  3561.  move.w startsmoothz,d5
  3562.  swap d5
  3563.  swap d2
  3564.  move.w a5,d2
  3565.  swap d2
  3566.  
  3567. ***********************************
  3568.  
  3569.  move.w d6,a2
  3570.  move.l d2,d6
  3571.  add.w #256,d6
  3572.  
  3573.  moveq #0,d0
  3574.  
  3575.  tst.w a2
  3576.  beq startatleftedge
  3577.  
  3578.  move.w widthleft(pc),d4
  3579.  
  3580.  move.w rightedge(pc),d3
  3581.  
  3582.  cmp.w #31,a2
  3583.  bgt.s notinfirststrip
  3584.  lea (a3,a2.w*4),a3
  3585.  cmp.w #32,d3
  3586.  ble.s allinfirststrip
  3587.  move.w #32,d7
  3588.  sub.w d7,d3
  3589.  sub.w a2,d7
  3590.  bra intofirststrip
  3591.  
  3592. allinfirststrip
  3593.  sub.w a2,d3
  3594.  move.w d3,d7
  3595.  move.w #0,d4
  3596.  bra allintofirst
  3597.  
  3598. notinfirststrip:
  3599.  sub.w #32,a2
  3600.  sub.w #32,d3
  3601.  adda.w #33*4,a3
  3602.  cmp.w #31,a2
  3603.  bgt.s notstartinsec
  3604.  lea (a3,a2.w*4),a3
  3605.  cmp.w #32,d3
  3606.  ble.s allinsecstrip
  3607.  move.w #32,d7
  3608.  sub.w d7,d3
  3609.  sub.w a2,d7
  3610.  move.w d3,d4
  3611.  bra tstwat
  3612.  
  3613. allinsecstrip
  3614.  sub.w a2,d3
  3615.  move.w d3,d7
  3616.  move.w #0,d4
  3617.  bra tstwat
  3618.  rts
  3619.  
  3620. prot8: dc.w 0
  3621.  
  3622. notstartinsec:
  3623.  sub.w #32,a2
  3624.  sub.w #32,d3
  3625.  adda.w #33*4,a3
  3626.  lea (a3,a2.w*4),a3
  3627.  cmp.w #32,d3
  3628.  ble.s allinthirdstrip
  3629.  move.w #32,d7
  3630.  sub.w d7,d3
  3631.  sub.w a2,d7
  3632.  move.w d3,d4
  3633.  bra tstwat
  3634.  rts
  3635.  
  3636. allinthirdstrip
  3637.  sub.w a2,d3
  3638.  move.w d3,d7
  3639.  move.w #0,d4
  3640.  bra tstwat
  3641.  rts
  3642.  
  3643. startatleftedge:
  3644.  
  3645.  move.w rightedge(pc),d3
  3646.  sub.w a2,d3
  3647.  
  3648.  move.w d3,d7
  3649.  cmp.w #32,d7
  3650.  ble.s .notoowide
  3651.  move.w #32,d7
  3652. .notoowide:
  3653.  sub.w d7,d3
  3654. intofirststrip:
  3655.  
  3656.  move.w d3,d4
  3657. allintofirst:
  3658.  
  3659.  move.w startsmoothx,d3
  3660.  
  3661. tstwat:
  3662.  
  3663.  tst.b usewater
  3664.  bne texturedwater
  3665.  
  3666.  
  3667. ******************************
  3668. * BumpMap the floor/ceiling! *
  3669.  tst.b usebumps
  3670.  bne.s BumpMap
  3671. ******************************
  3672.  
  3673. ordinary:
  3674.  moveq #0,d0
  3675.  
  3676.  dbra d7,acrossscrn
  3677.  rts
  3678.  
  3679. usebumps: dc.w $0
  3680. smoothbumps: dc.w $0
  3681.  
  3682.  include "ab3:source/bumpmap.s"
  3683.  
  3684.  CNOP 0,4
  3685. backbefore:
  3686.  and.w d1,d5
  3687.  move.b (a0,d5.w*4),d0
  3688.  move.w (a1,d0.w*2),(a3)
  3689.  addq #4,a3
  3690.  add.w a4,d3
  3691.  addx.l d6,d5
  3692.  dbcs d7,acrossscrn
  3693.  dbcc d7,backbefore
  3694.  bcc.s past1
  3695.  add.w #256,d5 
  3696.  bra.s past1
  3697.  
  3698. acrossscrn:
  3699.  and.w d1,d5
  3700.  move.b (a0,d5.w*4),d0
  3701.  move.w (a1,d0.w*2),(a3)
  3702.  addq #4,a3
  3703.  add.w a4,d3
  3704.  addx.l d2,d5
  3705.  dbcs d7,acrossscrn
  3706.  dbcc d7,backbefore
  3707.  bcc.s past1
  3708.  add.w #256,d5 
  3709. past1:
  3710.  
  3711.  move.w d4,d7
  3712.  bne.s .notdoneyet
  3713.  CACHE_FREEZE_ON d2
  3714.  rts
  3715. .notdoneyet:
  3716.  
  3717.  cmp.w #32,d7
  3718.  ble.s .notoowide
  3719.  move.w #32,d7
  3720. .notoowide
  3721.  sub.w d7,d4  
  3722.  addq #4,a3
  3723.  
  3724.  dbra d7,acrossscrn
  3725.  CACHE_FREEZE_ON d2
  3726.  rts
  3727.  
  3728. waterpt: dc.l waterlist
  3729.  
  3730. waterlist:
  3731.  dc.l waterfile
  3732.  dc.l waterfile+2
  3733.  dc.l waterfile+256
  3734.  dc.l waterfile+256+2
  3735.  dc.l waterfile+512
  3736.  dc.l waterfile+512+2
  3737.  dc.l waterfile+768
  3738.  dc.l waterfile+768+2
  3739. ; dc.l waterfile+768
  3740. ; dc.l waterfile+512+2
  3741. ; dc.l waterfile+512
  3742. ; dc.l waterfile+256+2
  3743. ; dc.l waterfile+256
  3744. ; dc.l waterfile+2
  3745. endwaterlist:
  3746.  
  3747. watertouse: dc.l waterfile
  3748.  
  3749. wtan: dc.w 0
  3750. wateroff: dc.w 0
  3751.  
  3752. texturedwater:
  3753.  
  3754.  add.w wateroff,d5
  3755.  
  3756.  move.l #brightentab,a1
  3757.  move.w dst,d0
  3758.  clr.b d0
  3759.  add.w d0,d0
  3760.  adda.w d0,a1
  3761.  
  3762.  move.w dst,d0
  3763.  asl.w #7,d0
  3764.  add.w wtan,d0
  3765.  and.w #8191,d0
  3766.  move.l #SineTable,a0
  3767.  move.w (a0,d0.w),d0
  3768.  ext.l d0
  3769.  move.w dst,d3
  3770.  add.w #300,d3
  3771.  divs d3,d0
  3772.  asr.w #6,d0
  3773.  add.w #2,d0
  3774.  
  3775.  move.w dst,d3
  3776.  asr.w #7,d3
  3777.  add.w d3,d0
  3778.  
  3779.  muls #104*4,d0
  3780.  move.w d0,a6
  3781.  
  3782.  move.l watertouse,a0
  3783.  
  3784.  move.w startsmoothx,d3
  3785.  dbra d7,acrossscrnw
  3786.  rts
  3787.  
  3788. backbeforew:
  3789.  and.w d1,d5
  3790.  move.w (a0,d5.w*4),d0
  3791.  move.b 1(a3,a6.w),d0
  3792.  move.w (a1,d0.w*2),(a3)
  3793.  addq #4,a3
  3794.  add.w a4,d3
  3795.  addx.l d6,d5
  3796.  dbcs d7,acrossscrnw
  3797.  dbcc d7,backbeforew
  3798.  bcc.s past1w
  3799.  add.w #256,d5 
  3800.  bra.s past1w
  3801.  
  3802. acrossscrnw:
  3803.  and.w d1,d5
  3804.  move.w (a0,d5.w*4),d0
  3805.  move.b 1(a3,a6.w),d0
  3806.  move.w (a1,d0.w*2),(a3)
  3807.  addq #4,a3
  3808.  add.w a4,d3
  3809.  addx.l d2,d5
  3810.  dbcs d7,acrossscrnw
  3811.  dbcc d7,backbeforew
  3812.  bcc.s past1w
  3813.  add.w #256,d5 
  3814. past1w:
  3815.  
  3816.  move.w d4,d7
  3817.  bne.s .notdoneyet
  3818.  rts
  3819. .notdoneyet:
  3820.  
  3821.  cmp.w #32,d7
  3822.  ble.s .notoowide
  3823.  move.w #32,d7
  3824. .notoowide
  3825.  sub.w d7,d4  
  3826.  addq #4,a3
  3827.  
  3828.  dbra d7,acrossscrnw
  3829.  CACHE_FREEZE_ON d2
  3830.  rts
  3831.  
  3832. usewater: dc.w 0
  3833. startsmoothx: dc.w 0
  3834. startsmoothz: dc.w 0
  3835.  
  3836. ********************************
  3837. *
  3838.  include "AB3:source/ObjDraw3.chipram"
  3839. *
  3840. ********************************
  3841.  
  3842. numframes:
  3843.  dc.w 0
  3844.  
  3845. alframe: dc.l Objects+4096
  3846.  
  3847. alan:
  3848.  dcb.l 6,0
  3849.  dcb.l 6,1
  3850.  dcb.l 6,2
  3851.  dcb.l 6,3
  3852. endalan:
  3853.  
  3854. alanptr: dc.l alan
  3855.  
  3856. Time2: dc.l 0
  3857. dispco:
  3858.  dc.w 0
  3859.  
  3860. KInt_Init    ;VBR Assumed $0
  3861.         move.l $68.w,OLDKINT
  3862.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  3863.         And.b    #$3f,$bfe201        Set Timers
  3864.         Move.b    #$7f,$bfed01
  3865.         Move.b    $bfed01,d0
  3866.         Move.b    #$88,$bfed01
  3867.         St.b    KInt_CCode        
  3868.         Move.b    #$a0,$bfee01        Start Timey Thing
  3869.         Rts                And return
  3870.  
  3871. OLDKINT: dc.l 0
  3872.  
  3873. KInt_Main    
  3874.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  3875.         Move.w    #8,$dff09a        Temp Disable Int.
  3876.         Move.w    $dff01e,d0        Intreqr
  3877.         And.w    #8,d0            Mask Out All X^ K_Int
  3878.     Beq    KInt_End            Not Keyboard Interrupt
  3879.         Lea    $bfed01,a6
  3880.         Move.w    #$8,$dff09c        Clear Int.Request
  3881.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  3882.         Ror.b    #1,d0            Roll to correct
  3883.         Not.b    d0            
  3884.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  3885. .HandShake    Move.b    #8,(a6)
  3886.         Move.b    #7,-$900(a6)
  3887.         Move.b    #0,-$800(a6)
  3888.         Move.b    #0,-$100(a6)
  3889.         Move.b    #$d1,$100(a6)        
  3890.         Tst.b    (a6)    
  3891. .wait        Btst    #0,(a6)
  3892.     Beq.s    .wait
  3893.         Move.b    #$a0,$100(a6)        
  3894.         Move.b    (a6),d0        
  3895.         Move.b    #$88,(a6)
  3896.         Lea    KeyMap,a1
  3897.         Moveq.w    #0,d0
  3898.         Move.b    KInt_CCode(pc),d0
  3899.     Bmi.s    KInt_KeyUp            neg if up 
  3900.  
  3901. KInt_KeyDown
  3902.         st (a1,d0.w)
  3903.     Bra    KInt_End
  3904.  
  3905. KInt_KeyUp
  3906.         And.w    #$7f,d0            Make code Positive
  3907.         clr.b (a1,d0.w)
  3908. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  3909.     
  3910.         Move.w    #$8008,$dff09a        Re-enable Int.
  3911.         Rte
  3912.  
  3913. KInt_CCode    Ds.b    1
  3914. KInt_Askey    Ds.b    1
  3915. KInt_OCode    Ds.w    1
  3916.  
  3917.  
  3918. PLR1_mouse_control
  3919.  jsr ReadMouse
  3920.  jsr PLR1_alwayskeys
  3921.  move.l #SineTable,a0
  3922.  move.w PLR1s_angspd,d1
  3923.  move.w PLR1s_angpos,d0
  3924.  move.w (a0,d0.w),PLR1s_sinval
  3925.  adda.w #2048,a0
  3926.  move.w (a0,d0.w),PLR1s_cosval
  3927.  
  3928.  move.l PLR1s_xspdval,d6
  3929.  move.l PLR1s_zspdval,d7
  3930.  
  3931.  neg.l d6
  3932.  ble.s .nobug1
  3933.  asr.l #1,d6
  3934.  add.l #1,d6
  3935.  bra.s .bug1
  3936. .nobug1
  3937.  asr.l #1,d6
  3938. .bug1:
  3939.  
  3940.  neg.l d7
  3941.  ble.s .nobug2
  3942.  asr.l #1,d7
  3943.  add.l #1,d7
  3944.  bra.s .bug2
  3945. .nobug2
  3946.  asr.l #1,d7
  3947. .bug2: 
  3948.  
  3949.  
  3950.  move.w ymouse,d3
  3951.  sub.w oldymouse,d3
  3952.  add.w d3,oldymouse
  3953.  asr.w #1,d3
  3954.  cmp.w #50,d3
  3955.  ble.s nofastfor
  3956.  move.w #50,d3
  3957. nofastfor:
  3958.  cmp.w #-50,d3
  3959.  bge.s nofastback
  3960.  move.w #-50,d3
  3961. nofastback:
  3962.  
  3963.  move.w d3,d2
  3964.  asl.w #3,d2
  3965.  move.w d2,d1
  3966.  add.w d2,d1
  3967.  add.w d2,d1
  3968.  add.w Bobble,d1
  3969.  and.w #8190,d1
  3970.  move.w d1,Bobble
  3971.  
  3972.  move.w PLR1s_sinval,d1
  3973.  move.w PLR1s_cosval,d2
  3974.  
  3975.  move.w d2,d4
  3976.  move.w d1,d5
  3977.  muls lrs,d4
  3978.  muls lrs,d5
  3979.  
  3980.  
  3981.  muls d3,d2
  3982.  muls d3,d1
  3983.  sub.l d4,d1
  3984.  add.l d5,d2
  3985.  
  3986.  sub.l d1,d6
  3987.  sub.l d2,d7
  3988.  add.l d6,PLR1s_xspdval
  3989.  add.l d7,PLR1s_zspdval
  3990.  move.l PLR1s_xspdval,d6
  3991.  move.l PLR1s_zspdval,d7
  3992.  add.l d6,PLR1s_xoff
  3993.  add.l d7,PLR1s_zoff
  3994.  
  3995.  tst.b PLR1_fire
  3996.  beq.s .firenotpressed
  3997. ; fire was pressed last time.
  3998.  btst #6,$bfe001
  3999.  bne.s .firenownotpressed
  4000. ; fire is still pressed this time.
  4001.  st PLR1_fire
  4002.  bra .doneplr1
  4003.  
  4004. .firenownotpressed:
  4005. ; fire has been released.
  4006.  clr.b PLR1_fire
  4007.  bra .doneplr1
  4008.  
  4009. .firenotpressed
  4010.  
  4011. ; fire was not pressed last frame...
  4012.  
  4013.  btst #6,$bfe001
  4014. ; if it has still not been pressed, go back above
  4015.  bne.s .firenownotpressed
  4016. ; fire was not pressed last time, and was this time, so has
  4017. ; been clicked.
  4018.  st PLR1_clicked
  4019.  st PLR1_fire
  4020.  
  4021. .doneplr1:
  4022.  move.l PLR1s_tyoff,d0
  4023.  move.l PLR1s_yoff,d1
  4024.  move.l PLR1s_yvel,d2
  4025.  sub.l d1,d0
  4026.  bgt.s .aboveground
  4027.  sub.l #1024,d2
  4028.  blt.s .notfast
  4029.  sub.l #2048,d2
  4030. .notfast:
  4031.  add.l d2,d1
  4032.  sub.l d2,d0
  4033.  blt.s .pastitall
  4034.  move.l #0,d2
  4035.  add.l d0,d1
  4036.  bra.s .pastitall
  4037.  
  4038. .aboveground:
  4039.  add.l d2,d1
  4040.  add.l #1024,d2
  4041. .pastitall:
  4042.  
  4043.  move.l d2,PLR1s_yvel
  4044.  move.l d1,PLR1s_yoff
  4045.  
  4046.  rts
  4047.  
  4048. PLR1_follow_path:
  4049.  
  4050.  move.l pathpt,a0
  4051.  move.w (a0),d1
  4052.  move.w d1,PLR1s_xoff
  4053.  move.w 2(a0),d1
  4054.  move.w d1,PLR1s_zoff
  4055.  move.w 4(a0),d0
  4056.  add.w d0,d0
  4057.  and.w #8190,d0
  4058.  move.w d0,PLR1_angpos
  4059.  
  4060.  move.w TempFrames,d0
  4061.  asl.w #3,d0
  4062.  adda.w d0,a0
  4063.  
  4064.  cmp.l #endpath,a0
  4065.  blt notrestartpath
  4066.  move.l #Path,a0
  4067. notrestartpath:
  4068.  move.l a0,pathpt
  4069.  
  4070.  rts
  4071.  
  4072. OldSpace: dc.b 0
  4073. SpaceTapped: dc.b 0
  4074. SPCTAP: dc.b 0
  4075.  even
  4076.  
  4077. PLR1_alwayskeys
  4078.  move.l #KeyMap,a5
  4079.  move.b $40(a5),d1
  4080.  beq.s nottapped
  4081.  tst.b OldSpace
  4082.  bne.s nottapped
  4083.  st SpaceTapped
  4084. nottapped:
  4085.  move.b d1,OldSpace
  4086.  
  4087.  lea 1(a5),a4
  4088.  lea GunData,a3
  4089.  moveq #0,d0
  4090.  move.w #4,d1
  4091. pickweap
  4092.  tst.b (a4)+
  4093.  beq.s notgotweap
  4094.  tst.b 7(a3)
  4095.  beq.s notgotweap
  4096.  move.b d0,GunSelected
  4097. notgotweap
  4098.  addq #1,d0
  4099.  addq #8,a3
  4100.  dbra d1,pickweap
  4101.  
  4102.  rts
  4103.  
  4104. PLR1_keyboard_control:
  4105.  
  4106.  move.l #SineTable,a0
  4107.  
  4108.  jsr PLR1_alwayskeys
  4109.  move.l #KeyMap,a5
  4110.  
  4111.  move.w PLR1s_angpos,d0
  4112.  move.w #70,d1
  4113.  move.w #7,d2
  4114.  tst.b $61(a5)
  4115.  beq.s nofaster
  4116.  move.w #120,d1
  4117.  move.w #10,d2
  4118. nofaster:
  4119.  
  4120.  moveq #0,d4 
  4121. ; tst.b $67(a5)
  4122. ; bne.s slidelr
  4123.  
  4124.  tst.b $4f(a5)
  4125.  beq.s noleftturn
  4126.  sub.w d1,d0
  4127. noleftturn
  4128.  move.l #KeyMap,a5
  4129.  tst.b $4e(a5)
  4130.  beq.s norightturn
  4131.  add.w d1,d0
  4132. norightturn
  4133. ; bra.s noslide
  4134.  
  4135. slidelr:
  4136.  tst.b $39(a5)
  4137.  beq.s noleftslide
  4138.  move.w d2,d4
  4139.  asr.w #1,d4
  4140. noleftslide
  4141.  move.l #KeyMap,a5
  4142.  tst.b $3a(a5)
  4143.  beq.s norightslide
  4144.  sub.w d2,d4
  4145.  asr.w #1,d4
  4146. norightslide
  4147.   
  4148. noslide:
  4149.   
  4150.  and.w #8191,d0
  4151.  move.w d0,PLR1s_angpos
  4152.  
  4153.  move.w (a0,d0.w),PLR1s_sinval
  4154.  adda.w #2048,a0
  4155.  move.w (a0,d0.w),PLR1s_cosval
  4156.  
  4157.  move.l PLR1s_xspdval,d6
  4158.  move.l PLR1s_zspdval,d7
  4159.  
  4160.  neg.l d6
  4161.  ble.s .nobug1
  4162.  asr.l #1,d6
  4163.  add.l #1,d6
  4164.  bra.s .bug1
  4165. .nobug1
  4166.  asr.l #1,d6
  4167. .bug1:
  4168.  
  4169.  neg.l d7
  4170.  ble.s .nobug2
  4171.  asr.l #1,d7
  4172.  add.l #1,d7
  4173.  bra.s .bug2
  4174. .nobug2
  4175.  asr.l #1,d7
  4176. .bug2: 
  4177.  
  4178.  moveq #0,d3
  4179.  
  4180.  tst.b $4c(a5)
  4181.  beq.s noforward
  4182.  neg.w d2
  4183.  move.w d2,d3
  4184.  
  4185. noforward:
  4186.  tst.b $4d(a5)
  4187.  beq.s nobackward
  4188.  move.w d2,d3
  4189. nobackward:
  4190.  
  4191.  move.w d3,d2
  4192.  asl.w #3,d2
  4193.  move.w d2,d1
  4194.  add.w d2,d1
  4195.  add.w d2,d1
  4196.  add.w Bobble,d1
  4197.  and.w #8190,d1
  4198.  move.w d1,Bobble
  4199.  
  4200.  move.w PLR1s_sinval,d1
  4201.  muls d3,d1
  4202.  move.w PLR1s_cosval,d2
  4203.  muls d3,d2
  4204.  
  4205.  sub.l d1,d6
  4206.  sub.l d2,d7
  4207.  move.w PLR1s_sinval,d1
  4208.  muls d4,d1
  4209.  move.w PLR1s_cosval,d2
  4210.  muls d4,d2
  4211.  sub.l d2,d6
  4212.  add.l d1,d7
  4213.  
  4214.  add.l d6,PLR1s_xspdval
  4215.  add.l d7,PLR1s_zspdval
  4216.  move.l PLR1s_xspdval,d6
  4217.  move.l PLR1s_zspdval,d7
  4218.  add.l d6,PLR1s_xoff
  4219.  add.l d7,PLR1s_zoff
  4220.  
  4221.  tst.b PLR1_fire
  4222.  beq.s .firenotpressed
  4223. ; fire was pressed last time.
  4224.  tst.b $65(a5)
  4225.  beq.s .firenownotpressed
  4226. ; fire is still pressed this time.
  4227.  st PLR1_fire
  4228.  bra .doneplr1
  4229.  
  4230. .firenownotpressed:
  4231. ; fire has been released.
  4232.  clr.b PLR1_fire
  4233.  bra .doneplr1
  4234.  
  4235. .firenotpressed
  4236.  
  4237. ; fire was not pressed last frame...
  4238.  
  4239.  tst.b $65(a5)
  4240. ; if it has still not been pressed, go back above
  4241.  beq.s .firenownotpressed
  4242. ; fire was not pressed last time, and was this time, so has
  4243. ; been clicked.
  4244.  st PLR1_clicked
  4245.  st PLR1_fire
  4246.  
  4247. .doneplr1:
  4248.  
  4249.  move.l PLR1s_tyoff,d0
  4250.  move.l PLR1s_yoff,d1
  4251.  move.l PLR1s_yvel,d2
  4252.  sub.l d1,d0
  4253.  bgt.s .aboveground
  4254.  sub.l #512,d2
  4255.  blt.s .notfast
  4256.  move.l #0,d2
  4257. .notfast:
  4258.  add.l d2,d1
  4259.  sub.l d2,d0
  4260.  blt.s .pastitall
  4261.  move.l #0,d2
  4262.  add.l d0,d1
  4263.  bra.s .pastitall
  4264.  
  4265. .aboveground:
  4266.  add.l d2,d1
  4267.  add.l #1024,d2
  4268. .pastitall:
  4269.  
  4270.  move.l d2,PLR1s_yvel
  4271.  move.l d1,PLR1s_yoff
  4272.  
  4273.  rts
  4274. passspace:
  4275.  ds.l 400 
  4276.  
  4277. PLR1_JoyStick_control:
  4278.  
  4279.  move.l #KeyMap,a5
  4280.  move.l #SineTable,a0
  4281.  
  4282.  btst #1,$dff00c
  4283.  sne d0
  4284.  btst #1,$dff00d
  4285.  sne d1
  4286.  btst #0,$dff00c
  4287.  sne d2
  4288.  btst #0,$dff00d
  4289.  sne d3
  4290.  btst #7,$bfe001
  4291.  seq $65(a5)
  4292.  
  4293.  move.b d0,$4f(a5)
  4294.  move.b d1,$4e(a5)
  4295.  eor.b d0,d2
  4296.  move.b d2,$4c(a5)
  4297.  eor.b d1,d3
  4298.  move.b d3,$4d(a5)
  4299.  
  4300.  jsr PLR1_alwayskeys
  4301.  
  4302.  move.w PLR1s_angpos,d0
  4303.  move.w #70,d1
  4304.  move.w #7,d2
  4305.  tst.b $61(a5)
  4306.  beq.s .nofaster
  4307.  move.w #120,d1
  4308.  move.w #10,d2
  4309. .nofaster:
  4310.  
  4311.  moveq #0,d4 
  4312. ; tst.b $67(a5)
  4313. ; bne.s slidelr
  4314.  
  4315.  tst.b $4f(a5)
  4316.  beq.s .noleftturn
  4317.  sub.w d1,d0
  4318. .noleftturn
  4319.  move.l #KeyMap,a5
  4320.  tst.b $4e(a5)
  4321.  beq.s .norightturn
  4322.  add.w d1,d0
  4323. .norightturn
  4324. ; bra.s noslide
  4325.  
  4326. .slidelr:
  4327.  tst.b $39(a5)
  4328.  beq.s .noleftslide
  4329.  move.w d2,d4
  4330.  asr.w #1,d4
  4331. .noleftslide
  4332.  move.l #KeyMap,a5
  4333.  tst.b $3a(a5)
  4334.  beq.s .norightslide
  4335.  sub.w d2,d4
  4336.  asr.w #1,d4
  4337. .norightslide
  4338.   
  4339. .noslide:
  4340.   
  4341.  and.w #8191,d0
  4342.  move.w d0,PLR1s_angpos
  4343.  
  4344.  move.w (a0,d0.w),PLR1s_sinval
  4345.  adda.w #2048,a0
  4346.  move.w (a0,d0.w),PLR1s_cosval
  4347.  
  4348.  move.l PLR1s_xspdval,d6
  4349.  move.l PLR1s_zspdval,d7
  4350.  
  4351.  neg.l d6
  4352.  ble.s .nobug1
  4353.  asr.l #1,d6
  4354.  add.l #1,d6
  4355.  bra.s .bug1
  4356. .nobug1
  4357.  asr.l #1,d6
  4358. .bug1:
  4359.  
  4360.  neg.l d7
  4361.  ble.s .nobug2
  4362.  asr.l #1,d7
  4363.  add.l #1,d7
  4364.  bra.s .bug2
  4365. .nobug2
  4366.  asr.l #1,d7
  4367. .bug2: 
  4368.  
  4369.  moveq #0,d3
  4370.  
  4371.  tst.b $4c(a5)
  4372.  beq.s .noforward
  4373.  neg.w d2
  4374.  move.w d2,d3
  4375. .noforward:
  4376.  tst.b $4d(a5)
  4377.  beq.s .nobackward
  4378.  move.w d2,d3
  4379. .nobackward:
  4380.  
  4381.  move.w d3,d2
  4382.  asl.w #3,d2
  4383.  move.w d2,d1
  4384.  add.w d2,d1
  4385.  add.w d2,d1
  4386.  add.w Bobble,d1
  4387.  and.w #8190,d1
  4388.  move.w d1,Bobble
  4389.  
  4390.  move.w PLR1s_sinval,d1
  4391.  muls d3,d1
  4392.  move.w PLR1s_cosval,d2
  4393.  muls d3,d2
  4394.  
  4395.  sub.l d1,d6
  4396.  sub.l d2,d7
  4397.  move.w PLR1s_sinval,d1
  4398.  muls d4,d1
  4399.  move.w PLR1s_cosval,d2
  4400.  muls d4,d2
  4401.  sub.l d2,d6
  4402.  add.l d1,d7
  4403.  
  4404.  add.l d6,PLR1s_xspdval
  4405.  add.l d7,PLR1s_zspdval
  4406.  move.l PLR1s_xspdval,d6
  4407.  move.l PLR1s_zspdval,d7
  4408.  add.l d6,PLR1s_xoff
  4409.  add.l d7,PLR1s_zoff
  4410.  
  4411.  tst.b PLR1_fire
  4412.  beq.s .firenotpressed
  4413. ; fire was pressed last time.
  4414.  tst.b $65(a5)
  4415.  beq.s .firenownotpressed
  4416. ; fire is still pressed this time.
  4417.  st PLR1_fire
  4418.  bra .doneplr1
  4419.  
  4420. .firenownotpressed:
  4421. ; fire has been released.
  4422.  clr.b PLR1_fire
  4423.  bra .doneplr1
  4424.  
  4425. .firenotpressed
  4426.  
  4427. ; fire was not pressed last frame...
  4428.  
  4429.  tst.b $65(a5)
  4430. ; if it has still not been pressed, go back above
  4431.  beq.s .firenownotpressed
  4432. ; fire was not pressed last time, and was this time, so has
  4433. ; been clicked.
  4434.  st PLR1_clicked
  4435.  st PLR1_fire
  4436.  
  4437. .doneplr1:
  4438.  
  4439.  move.l PLR1s_tyoff,d0
  4440.  move.l PLR1s_yoff,d1
  4441.  move.l PLR1s_yvel,d2
  4442.  sub.l d1,d0
  4443.  bgt.s .aboveground
  4444.  sub.l #512,d2
  4445.  blt.s .notfast
  4446.  move.l #0,d2
  4447. .notfast:
  4448.  add.l d2,d1
  4449.  sub.l d2,d0
  4450.  blt.s .pastitall
  4451.  move.l #0,d2
  4452.  add.l d0,d1
  4453.  bra.s .pastitall
  4454.  
  4455. .aboveground:
  4456.  add.l d2,d1
  4457.  add.l #1024,d2
  4458. .pastitall:
  4459.  
  4460.  move.l d2,PLR1s_yvel
  4461.  move.l d1,PLR1s_yoff
  4462.  
  4463.  rts
  4464.  
  4465. prot7: dc.w 0
  4466.  
  4467. Chan0inter:
  4468.  
  4469.  move.w #$0010,$dff000+intreq
  4470.  
  4471.  tst.b doanything
  4472.  bne.s dosomething
  4473.  rte
  4474.  
  4475. dosomething:
  4476.  
  4477.  addq.w #1,FramesToDraw
  4478.  tst.b counting
  4479.  beq nostopcounter
  4480.  JSR STOPCOUNTNOADD
  4481. nostopcounter:
  4482.  movem.l d0-d7/a0-a6,-(a7)
  4483.  
  4484.  cmp.b #'b',Prefsfile+3
  4485.  bne.s .noback
  4486.  jsr mt_music
  4487. .noback:
  4488.  
  4489.  bra dontshowtime
  4490.  
  4491.  tst.b oktodisplay
  4492.  beq dontshowtime
  4493.  clr.b oktodisplay
  4494.  subq.w #1,dispco
  4495.  bgt dontshowtime
  4496.  move.w #10,dispco
  4497.  
  4498.  move.l #TimerScr+10,a0
  4499.  move.l TimeCount,d0
  4500.  bge.s timenotneg
  4501.  move.l #1111*256,d0
  4502. timenotneg:
  4503.  asr.l #8,d0
  4504.  move.l #digits,a1
  4505.  move.w #7,d2
  4506. digitlop
  4507.  divs #10,d0
  4508.  swap d0
  4509.  lea (a1,d0.w*8),a2
  4510.  move.b (a2)+,(a0)
  4511.  move.b (a2)+,24(a0)
  4512.  move.b (a2)+,24*2(a0)
  4513.  move.b (a2)+,24*3(a0)
  4514.  move.b (a2)+,24*4(a0)
  4515.  move.b (a2)+,24*5(a0)
  4516.  move.b (a2)+,24*6(a0)
  4517.  move.b (a2)+,24*7(a0)
  4518.  subq #1,a0
  4519.  swap d0
  4520.  ext.l d0
  4521.  dbra d2,digitlop
  4522.  
  4523.  move.l #TimerScr+10+24*10,a0
  4524.  move.l NumTimes,d0
  4525.  move.l #digits,a1
  4526.  move.w #3,d2
  4527. digitlop2
  4528.  divs #10,d0
  4529.  swap d0
  4530.  lea (a1,d0.w*8),a2
  4531.  move.b (a2)+,(a0)
  4532.  move.b (a2)+,24(a0)
  4533.  move.b (a2)+,24*2(a0)
  4534.  move.b (a2)+,24*3(a0)
  4535.  move.b (a2)+,24*4(a0)
  4536.  move.b (a2)+,24*5(a0)
  4537.  move.b (a2)+,24*6(a0)
  4538.  move.b (a2)+,24*7(a0)
  4539.  subq #1,a0
  4540.  swap d0
  4541.  ext.l d0
  4542.  dbra d2,digitlop2
  4543.  
  4544.  move.l #TimerScr+10+24*20,a0
  4545.  moveq #0,d0
  4546.  move.w FramesToDraw,d0
  4547.  move.l #digits,a1
  4548.  move.w #2,d2
  4549. digitlop3
  4550.  divs #10,d0
  4551.  swap d0
  4552.  lea (a1,d0.w*8),a2
  4553.  move.b (a2)+,(a0)
  4554.  move.b (a2)+,24(a0)
  4555.  move.b (a2)+,24*2(a0)
  4556.  move.b (a2)+,24*3(a0)
  4557.  move.b (a2)+,24*4(a0)
  4558.  move.b (a2)+,24*5(a0)
  4559.  move.b (a2)+,24*6(a0)
  4560.  move.b (a2)+,24*7(a0)
  4561.  subq #1,a0
  4562.  swap d0
  4563.  ext.l d0
  4564.  dbra d2,digitlop3
  4565.  
  4566. dontshowtime:
  4567.  
  4568.  move.w Robotanimpos,d0
  4569.  add.w #6*38,d0
  4570.  cmp.w #6*38*64,d0
  4571.  blt.s norebot
  4572.  move.w #0,d0
  4573. norebot:
  4574.  move.w d0,Robotanimpos
  4575.  
  4576.  tst.w d0
  4577.  seq d1
  4578.  cmp.w #6*32*38,d0
  4579.  seq d2
  4580.  or.b d2,d1
  4581.  or.b d1,clump
  4582.  
  4583.  move.w Robotarmpos,d0
  4584.  add.w #6*14,d0
  4585.  cmp.w #6*14*64,d0
  4586.  blt.s norebot2
  4587.  move.w #0,d0
  4588. norebot2:
  4589.  move.w d0,Robotarmpos
  4590.  
  4591.  move.l alanptr,a0
  4592.  move.l (a0)+,alframe
  4593.  cmp.l #endalan,a0
  4594.  blt.s nostartalan
  4595.  move.l #alan,a0
  4596. nostartalan:
  4597.  move.l a0,alanptr
  4598.  
  4599.  move.l #$dff000,a6
  4600.  
  4601.  cmp.b #'4',Prefsfile+1
  4602.  bne.s nomuckabout
  4603.  
  4604.  move.w #$0,d0 
  4605.  tst.b NoiseMade0LEFT
  4606.  beq.s noturnoff0
  4607.  move.w #1,d0
  4608. noturnoff0:
  4609.  tst.b NoiseMade0RIGHT
  4610.  beq.s noturnoff1
  4611.  or.w #2,d0
  4612. noturnoff1:
  4613.  tst.b NoiseMade1RIGHT
  4614.  beq.s noturnoff2
  4615.  or.w #4,d0
  4616. noturnoff2:
  4617.  tst.b NoiseMade1LEFT
  4618.  beq.s noturnoff3
  4619.  or.w #8,d0
  4620. noturnoff3:
  4621.  move.w d0,dmacon(a6)
  4622.  
  4623. nomuckabout:
  4624.  
  4625.  tst.b PLR1MOUSE
  4626.  beq.s PLR1_nomouse
  4627.  bsr PLR1_mouse_control
  4628. PLR1_nomouse:
  4629.  tst.b PLR1KEYS
  4630.  beq.s PLR1_nokeys
  4631.  bsr PLR1_keyboard_control
  4632. PLR1_nokeys:
  4633. ; tst.b PLR1PATH
  4634. ; beq.s PLR1_nopath
  4635. ; bsr PLR1_follow_path
  4636. ;PLR1_nopath:
  4637.  tst.b PLR1JOY
  4638.  beq.s PLR1_nojoy
  4639.  bsr PLR1_JoyStick_control
  4640. PLR1_nojoy: 
  4641.  
  4642. ; tst.b PLR2_fire
  4643. ; beq.s firenotpressed2
  4644. ; fire was pressed last time.
  4645. ; btst #7,$bfe001
  4646. ; bne.s firenownotpressed2
  4647. ; fire is still pressed this time.
  4648. ; st PLR2_fire
  4649. ; bra dointer
  4650.  
  4651. firenownotpressed2:
  4652. ; fire has been released.
  4653. ; clr.b PLR2_fire
  4654. ; bra dointer
  4655.  
  4656. firenotpressed2
  4657.  
  4658. ; fire was not pressed last frame...
  4659.  
  4660. ; btst #7,$bfe001
  4661. ; if it has still not been pressed, go back above
  4662. ; bne.s firenownotpressed2
  4663. ; fire was not pressed last time, and was this time, so has
  4664. ; been clicked.
  4665. ; st PLR2_clicked
  4666. ; st PLR2_fire
  4667.  
  4668. dointer
  4669.  
  4670.  cmp.b #'4',Prefsfile+1
  4671.  beq fourchannel
  4672.  
  4673.  btst #1,$dff000+intreqr
  4674.  bne.s newsampbitl
  4675.  
  4676.  movem.l (a7)+,d0-d7/a0-a6
  4677.  tst.b counting
  4678.  beq .nostartcounter
  4679.  JSR STARTCOUNT
  4680. .nostartcounter:
  4681. noneed:
  4682.  
  4683.  rte
  4684.  
  4685.  
  4686. swappedem: dc.w 0
  4687.  
  4688. newsampbitl:
  4689.  
  4690.  move.w #$820f,$dff000+dmacon
  4691.  
  4692.  move.w #$200,$dff000+intreq
  4693.  
  4694.  tst.b CHANNELDATA
  4695.  bne nochannel0
  4696.  
  4697.  move.l pos0LEFT,a0
  4698.  move.l pos2LEFT,a1
  4699.  
  4700.  move.l #tab,a2
  4701.  
  4702.  moveq #0,d0
  4703.  moveq #0,d1
  4704.  move.b vol0left,d0
  4705.  move.b vol2left,d1
  4706.  cmp.b d1,d0
  4707.  slt swappedem
  4708.  bge.s fbig0
  4709.  
  4710. ; d1 is bigger so scale d0 and use d1
  4711. ; as audiochannel volume.
  4712.  
  4713.  exg a0,a1
  4714.  asl.w #6,d0
  4715.  divs d1,d0
  4716.  lsl.w #8,d0
  4717.  adda.w d0,a2
  4718.  move.w d1,$dff0a8
  4719.  bra.s donechan0
  4720.  
  4721. fbig0:
  4722.  tst.w d0
  4723.  beq.s donechan0
  4724.  asl.w #6,d1
  4725.  divs d0,d1
  4726.  lsl.w #8,d1
  4727.  adda.w d1,a2
  4728.  move.w d0,$dff0a8
  4729.  
  4730. donechan0:
  4731.  
  4732.  move.l Aupt0,a3
  4733.  move.l a3,$dff0a0
  4734.  move.l Auback0,Aupt0
  4735.  move.l a3,Auback0
  4736.  
  4737.  move.l Auback0,a3
  4738.  
  4739.  moveq #0,d0
  4740.  moveq #0,d1
  4741.  moveq #0,d2
  4742.  moveq #0,d3
  4743.  moveq #0,d4
  4744.  moveq #0,d5
  4745.  move.w #49,d7
  4746. loop:
  4747.  move.l (a0)+,d0
  4748.  move.b (a1)+,d1
  4749.  move.b (a1)+,d2
  4750.  move.b (a1)+,d3
  4751.  move.b (a1)+,d4
  4752.  move.b (a2,d3.w),d5
  4753.  swap d5
  4754.  move.b (a2,d1.w),d5
  4755.  asl.l #8,d5
  4756.  move.b (a2,d2.w),d5
  4757.  swap d5
  4758.  move.b (a2,d4.w),d5
  4759.  add.l d5,d0
  4760.  move.l d0,(a3)+
  4761.  dbra d7,loop
  4762.  
  4763.  tst.b swappedem
  4764.  beq.s .ok23
  4765.  exg a0,a1
  4766. .ok23:
  4767.  
  4768.  cmp.l Samp0endLEFT,a0
  4769.  blt.s .notoffendsamp1
  4770.  move.l #empty,a0
  4771.  move.l #emptyend,Samp0endLEFT
  4772.  move.b #0,vol0left
  4773.  st LEFTCHANDATA+1
  4774.  move.w #0,LEFTCHANDATA+2
  4775. .notoffendsamp1:
  4776.  
  4777.  cmp.l Samp2endLEFT,a1
  4778.  blt.s .notoffendsamp2
  4779.  move.l #empty,a1
  4780.  move.l #emptyend,Samp2endLEFT
  4781.  move.b #0,vol2left
  4782.  st LEFTCHANDATA+1+8
  4783.  move.w #0,LEFTCHANDATA+2+8
  4784. .notoffendsamp2:
  4785.  
  4786.  move.l a0,pos0LEFT
  4787.  move.l a1,pos2LEFT
  4788.  
  4789. nochannel0:
  4790.  
  4791.  tst.b CHANNELDATA+16
  4792.  bne nochannel1
  4793.  
  4794.  
  4795.  move.l pos0RIGHT,a0
  4796.  move.l pos2RIGHT,a1
  4797.  
  4798.  move.l Aupt1,a3
  4799.  move.l a3,$dff0b0
  4800.  move.l Auback1,Aupt1
  4801.  move.l a3,Auback1
  4802.  
  4803.  move.l #tab,a2
  4804.  
  4805.  moveq #0,d0
  4806.  moveq #0,d1
  4807.  move.b vol0right,d0
  4808.  move.b vol2right,d1
  4809.  cmp.b d1,d0
  4810.  slt swappedem
  4811.  bge.s fbig1
  4812.  
  4813. ; d1 is bigger so scale d0 and use d1
  4814. ; as audiochannel volume.
  4815.  
  4816.  exg a0,a1
  4817.  asl.w #6,d0
  4818.  divs d1,d0
  4819.  lsl.w #8,d0
  4820.  adda.w d0,a2
  4821.  move.w d1,$dff0b8
  4822.  bra.s donechan1
  4823.  
  4824. fbig1:
  4825.  tst.w d0
  4826.  beq.s donechan1
  4827.  asl.w #6,d1
  4828.  divs d0,d1
  4829.  lsl.w #8,d1
  4830.  adda.w d1,a2
  4831.  move.w d0,$dff0b8
  4832.  
  4833. donechan1:
  4834.  moveq #0,d0
  4835.  moveq #0,d1
  4836.  moveq #0,d2
  4837.  moveq #0,d3
  4838.  moveq #0,d4
  4839.  moveq #0,d5
  4840.  move.w #49,d7
  4841. loop2:
  4842.  move.l (a0)+,d0
  4843.  move.b (a1)+,d1
  4844.  move.b (a1)+,d2
  4845.  move.b (a1)+,d3
  4846.  move.b (a1)+,d4
  4847.  move.b (a2,d3.w),d5
  4848.  swap d5
  4849.  move.b (a2,d1.w),d5
  4850.  asl.l #8,d5
  4851.  move.b (a2,d2.w),d5
  4852.  swap d5
  4853.  move.b (a2,d4.w),d5
  4854.  add.l d5,d0
  4855.  move.l d0,(a3)+
  4856.  dbra d7,loop2
  4857.  
  4858.  tst.b swappedem
  4859.  beq.s ok01
  4860.  exg a0,a1
  4861. ok01:
  4862.  
  4863.  cmp.l Samp0endRIGHT,a0
  4864.  blt.s .notoffendsamp1
  4865.  move.l #empty,a0
  4866.  move.l #emptyend,Samp0endRIGHT
  4867.  move.b #0,vol0right
  4868.  st RIGHTCHANDATA+1
  4869.  move.w #0,RIGHTCHANDATA+2
  4870. .notoffendsamp1:
  4871.  
  4872.  cmp.l Samp2endRIGHT,a1
  4873.  blt.s .notoffendsamp2
  4874.  move.l #empty,a1
  4875.  move.l #emptyend,Samp2endRIGHT
  4876.  move.b #0,vol2right
  4877.  st RIGHTCHANDATA+1+8
  4878.  move.w #0,RIGHTCHANDATA+2+8
  4879. .notoffendsamp2:
  4880.  
  4881.  move.l a0,pos0RIGHT
  4882.  move.l a1,pos2RIGHT
  4883.  
  4884. nochannel1:
  4885.  
  4886. ******************* Other two channels
  4887.  
  4888.  move.l pos1LEFT,a0
  4889.  move.l pos3LEFT,a1
  4890.  
  4891.  move.l #tab,a2
  4892.  
  4893.  moveq #0,d0
  4894.  moveq #0,d1
  4895.  move.b vol1left,d0
  4896.  move.b vol3left,d1
  4897.  cmp.b d1,d0
  4898.  slt swappedem
  4899.  bge.s fbig2
  4900.  
  4901. ; d1 is bigger so scale d0 and use d1
  4902. ; as audiochannel volume.
  4903.  
  4904.  exg a0,a1
  4905.  asl.w #6,d0
  4906.  divs d1,d0
  4907.  lsl.w #8,d0
  4908.  adda.w d0,a2
  4909.  move.w d1,$dff0d8
  4910.  bra.s donechan2
  4911.  
  4912. fbig2:
  4913.  tst.w d0
  4914.  beq.s donechan2
  4915.  asl.w #6,d1
  4916.  divs d0,d1
  4917.  lsl.w #8,d1
  4918.  adda.w d1,a2
  4919.  move.w d0,$dff0d8
  4920.  
  4921. donechan2:
  4922.  
  4923.  move.l Aupt2,a3
  4924.  move.l a3,$dff0d0
  4925.  move.l Auback2,Aupt2
  4926.  move.l a3,Auback2
  4927.  
  4928.  moveq #0,d0
  4929.  moveq #0,d1
  4930.  moveq #0,d2
  4931.  moveq #0,d3
  4932.  moveq #0,d4
  4933.  moveq #0,d5
  4934.  move.w #49,d7
  4935. loop3:
  4936.  move.l (a0)+,d0
  4937.  move.b (a1)+,d1
  4938.  move.b (a1)+,d2
  4939.  move.b (a1)+,d3
  4940.  move.b (a1)+,d4
  4941.  move.b (a2,d3.w),d5
  4942.  swap d5
  4943.  move.b (a2,d1.w),d5
  4944.  asl.l #8,d5
  4945.  move.b (a2,d2.w),d5
  4946.  swap d5
  4947.  move.b (a2,d4.w),d5
  4948.  add.l d5,d0
  4949.  move.l d0,(a3)+
  4950.  dbra d7,loop3
  4951.  
  4952.  tst.b swappedem
  4953.  beq.s .ok23
  4954.  exg a0,a1
  4955. .ok23:
  4956.  
  4957.  cmp.l Samp1endLEFT,a0
  4958.  blt.s .notoffendsamp3
  4959.  move.l #empty,a0
  4960.  move.l #emptyend,Samp1endLEFT
  4961.  move.b #0,vol1left
  4962.  st LEFTCHANDATA+1+4
  4963.  move.w #0,LEFTCHANDATA+2+4
  4964. .notoffendsamp3:
  4965.  
  4966.  cmp.l Samp3endLEFT,a1
  4967.  blt.s .notoffendsamp4
  4968.  move.l #empty,a1
  4969.  move.l #emptyend,Samp3endLEFT
  4970.  move.b #0,vol3left
  4971.  st LEFTCHANDATA+1+12
  4972.  move.w #0,LEFTCHANDATA+2+12
  4973. .notoffendsamp4:
  4974.  
  4975.  move.l a0,pos1LEFT
  4976.  move.l a1,pos3LEFT
  4977.  
  4978.  move.l pos1RIGHT,a0
  4979.  move.l pos3RIGHT,a1
  4980.  
  4981.  move.l Aupt3,a3
  4982.  move.l a3,$dff0c0
  4983.  move.l Auback3,Aupt3
  4984.  move.l a3,Auback3
  4985.  
  4986.  move.l #tab,a2
  4987.  
  4988.  moveq #0,d0
  4989.  moveq #0,d1
  4990.  move.b vol1right,d0
  4991.  move.b vol3right,d1
  4992.  cmp.b d1,d0
  4993.  slt.s swappedem
  4994.  bge.s fbig3
  4995.  
  4996.  exg a0,a1
  4997.  asl.w #6,d0
  4998.  divs d1,d0
  4999.  lsl.w #8,d0
  5000.  adda.w d0,a2
  5001.  move.w d1,$dff0c8
  5002.  bra.s donechan3
  5003.  
  5004. fbig3:
  5005.  tst.w d0
  5006.  beq.s donechan3
  5007.  asl.w #6,d1
  5008.  divs d0,d1
  5009.  lsl.w #8,d1
  5010.  adda.w d1,a2
  5011.  move.w d0,$dff0c8
  5012. donechan3:
  5013.  
  5014.  moveq #0,d0
  5015.  moveq #0,d1
  5016.  moveq #0,d2
  5017.  moveq #0,d3
  5018.  moveq #0,d4
  5019.  moveq #0,d5
  5020.  move.w #49,d7
  5021. loop4:
  5022.  move.l (a0)+,d0
  5023.  move.b (a1)+,d1
  5024.  move.b (a1)+,d2
  5025.  move.b (a1)+,d3
  5026.  move.b (a1)+,d4
  5027.  move.b (a2,d3.w),d5
  5028.  swap d5
  5029.  move.b (a2,d1.w),d5
  5030.  asl.l #8,d5
  5031.  move.b (a2,d2.w),d5
  5032.  swap d5
  5033.  move.b (a2,d4.w),d5
  5034.  add.l d5,d0
  5035.  move.l d0,(a3)+
  5036.  dbra d7,loop4
  5037.  
  5038.  tst.b swappedem
  5039.  beq.s .ok23
  5040.  exg a0,a1
  5041. .ok23:
  5042.  
  5043.  cmp.l Samp1endRIGHT,a0
  5044.  blt.s notoffendsamp3
  5045.  move.l #empty,a0
  5046.  move.l #emptyend,Samp1endRIGHT
  5047.  move.b #0,vol1right
  5048.  st RIGHTCHANDATA+1+4
  5049.  move.w #0,RIGHTCHANDATA+2+4
  5050. notoffendsamp3:
  5051.  
  5052.  cmp.l Samp3endRIGHT,a1
  5053.  blt.s notoffendsamp4
  5054.  move.l #empty,a1
  5055.  move.l #emptyend,Samp3endRIGHT
  5056.  move.b #0,vol3right
  5057.  st RIGHTCHANDATA+1+12
  5058.  move.w #0,RIGHTCHANDATA+2+12
  5059. notoffendsamp4:
  5060.  
  5061.  move.l a0,pos1RIGHT
  5062.  move.l a1,pos3RIGHT
  5063.  
  5064.  movem.l (a7)+,d0-d7/a0-a6
  5065.  tst.b counting
  5066.  beq .nostartcounter
  5067.  JSR STARTCOUNT
  5068. .nostartcounter:
  5069.  
  5070.  rte
  5071.  
  5072. ***********************************
  5073. * 4 channel sound routine
  5074. ***********************************
  5075.  
  5076. fourchannel:
  5077.  
  5078.  move.l #$dff000,a6
  5079.  
  5080.  btst #7,intreqrl(a6)
  5081.  beq.s nofinish0
  5082.  move.w #0,LEFTCHANDATA+2
  5083.  st LEFTCHANDATA+1
  5084.  move.l #null,$a0(a6)
  5085.  move.w #100,$a4(a6) 
  5086.  move.w #$0080,intreq(a6)
  5087. nofinish0:
  5088.  
  5089.  
  5090.  tst.b NoiseMade0pLEFT
  5091.  beq.s NoChan0sound
  5092.  
  5093.  move.l Samp0endLEFT,d0
  5094.  move.l pos0LEFT,d1
  5095.  sub.l d1,d0
  5096.  asr.w #1,d0
  5097.  move.w d0,$a4(a6)
  5098.  move.l d1,$a0(a6)
  5099.  move.w #$8201,dmacon(a6)
  5100.  moveq #0,d0
  5101.  move.b vol0left,d0
  5102.  move.w d0,$a8(a6)
  5103.  
  5104. NoChan0sound:
  5105.  
  5106.  btst #0,intreqr(a6)
  5107.  beq.s nofinish1
  5108.  move.w #0,RIGHTCHANDATA+2
  5109.  st RIGHTCHANDATA+1
  5110.  move.l #null,$b0(a6)
  5111.  move.w #100,$b4(a6)
  5112.  move.w #$0100,intreq(a6)
  5113. nofinish1:
  5114.  
  5115.  tst.b NoiseMade0pRIGHT
  5116.  beq.s NoChan1sound
  5117.  
  5118.  move.l Samp0endRIGHT,d0
  5119.  move.l pos0RIGHT,d1
  5120.  sub.l d1,d0
  5121.  asr.w #1,d0
  5122.  move.w d0,$b4(a6)
  5123.  move.l d1,$b0(a6)
  5124.  move.w #$8202,dmacon(a6)
  5125.  moveq #0,d0
  5126.  move.b vol0right,d0
  5127.  move.w d0,$b8(a6)
  5128.  
  5129. NoChan1sound:
  5130.  
  5131.  
  5132.  btst #1,intreqr(a6)
  5133.  beq.s nofinish2
  5134.  move.w #0,RIGHTCHANDATA+2+4
  5135.  st RIGHTCHANDATA+1+4
  5136.  move.l #null,$c0(a6)
  5137.  move.w #100,$c4(a6)
  5138.  move.w #$0200,intreq(a6)
  5139. nofinish2:
  5140.  
  5141.  tst.b NoiseMade1pRIGHT
  5142.  beq.s NoChan2sound
  5143.  
  5144.  move.l Samp1endRIGHT,d0
  5145.  move.l pos1RIGHT,d1
  5146.  sub.l d1,d0
  5147.  asr.w #1,d0
  5148.  move.w d0,$c4(a6)
  5149.  move.l d1,$c0(a6)
  5150.  move.w #$8204,dmacon(a6)
  5151.  moveq #0,d0
  5152.  move.b vol1right,d0
  5153.  move.w d0,$c8(a6)
  5154.  
  5155. NoChan2sound:
  5156.  
  5157.  btst #2,intreqr(a6)
  5158.  beq.s nofinish3
  5159.  move.w #0,LEFTCHANDATA+2+4
  5160.  st LEFTCHANDATA+1+4
  5161.  move.l #null,$d0(a6)
  5162.  move.w #100,$d4(a6)
  5163.  move.w #$0400,intreq(a6)
  5164. nofinish3:
  5165.  
  5166.  tst.b NoiseMade1pLEFT
  5167.  beq.s NoChan3sound
  5168.  
  5169.  move.l Samp1endLEFT,d0
  5170.  move.l pos1LEFT,d1
  5171.  sub.l d1,d0
  5172.  asr.w #1,d0
  5173.  move.w d0,$d4(a6)
  5174.  move.l d1,$d0(a6)
  5175.  move.w #$8208,dmacon(a6)
  5176.  moveq #0,d0
  5177.  move.b vol1left,d0
  5178.  move.w d0,$d8(a6)
  5179.  
  5180. NoChan3sound:
  5181.  
  5182. nomorechannels:
  5183.  
  5184.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  5185.  move.l #0,NoiseMade0LEFT
  5186.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  5187.  move.l #0,NoiseMade0RIGHT
  5188.  
  5189.  movem.l (a7)+,d0-d7/a0-a6
  5190.  tst.b counting
  5191.  beq .nostartcounter
  5192.  JSR STARTCOUNT
  5193. .nostartcounter:
  5194.  
  5195.  rte
  5196.  
  5197. backbeat: dc.w 0
  5198.  
  5199. Samp0endRIGHT: dc.l emptyend
  5200. Samp1endRIGHT: dc.l emptyend
  5201. Samp2endRIGHT: dc.l emptyend
  5202. Samp3endRIGHT: dc.l emptyend
  5203. Samp0endLEFT: dc.l emptyend
  5204. Samp1endLEFT: dc.l emptyend
  5205. Samp2endLEFT: dc.l emptyend
  5206. Samp3endLEFT: dc.l emptyend
  5207.  
  5208. Aupt0: dc.l null
  5209. Auback0: dc.l null+500
  5210. Aupt2: dc.l null3
  5211. Auback2: dc.l null3+500
  5212. Aupt3: dc.l null4
  5213. Auback3: dc.l null4+500
  5214. Aupt1: dc.l null2
  5215. Auback1: dc.l null2+500
  5216.  
  5217. NoiseMade0LEFT: dc.b 0
  5218. NoiseMade1LEFT: dc.b 0
  5219. NoiseMade2LEFT: dc.b 0
  5220. NoiseMade3LEFT: dc.b 0
  5221. NoiseMade0pLEFT: dc.b 0
  5222. NoiseMade1pLEFT: dc.b 0
  5223. NoiseMade2pLEFT: dc.b 0
  5224. NoiseMade3pLEFT: dc.b 0
  5225. NoiseMade0RIGHT: dc.b 0
  5226. NoiseMade1RIGHT: dc.b 0
  5227. NoiseMade2RIGHT: dc.b 0
  5228. NoiseMade3RIGHT: dc.b 0
  5229. NoiseMade0pRIGHT: dc.b 0
  5230. NoiseMade1pRIGHT: dc.b 0
  5231. NoiseMade2pRIGHT: dc.b 0
  5232. NoiseMade3pRIGHT: dc.b 0
  5233.  
  5234. empty: ds.l 100
  5235. emptyend:
  5236.  
  5237. **************************************
  5238. * I want a routine to calculate all the
  5239. * info needed for the sound player to
  5240. * work, given say position of noise, volume
  5241. * and sample number.
  5242.  
  5243. Samplenum: dc.w 0
  5244. Noisex: dc.w 0
  5245. Noisez: dc.w 0
  5246. Noisevol: dc.w 0
  5247. chanpick: dc.w 0
  5248. IDNUM: dc.w 0
  5249. needleft: dc.b 0
  5250. needright: dc.b 0
  5251. STEREO: dc.b $0
  5252. even
  5253. prot6: dc.w 0
  5254.  
  5255.  even
  5256.  
  5257. CHANNELDATA:
  5258. LEFTCHANDATA:
  5259.  dc.l $FF000000
  5260.  dc.l $00000000
  5261.  dc.l $FF000000
  5262.  dc.l $00000000
  5263. RIGHTCHANDATA:
  5264.  dc.l $FF000000
  5265.  dc.l $00000000
  5266.  dc.l $FF000000
  5267.  dc.l $00000000
  5268.  
  5269. RIGHTPLAYEDTAB: ds.l 20
  5270. LEFTPLAYEDTAB: ds.l 20
  5271.  
  5272. MakeSomeNoise:
  5273.  
  5274. ; Plan for new sound handler:
  5275. ; It is sent a sample number,
  5276. ; a position relative to the
  5277. ; player, an id number and a volume.
  5278. ; Also notifplaying.
  5279.  
  5280. ; indirect inputs are the available
  5281. ; channel flags and whether or not
  5282. ; stereo sound is selected.
  5283.  
  5284. ; the algorithm must decide
  5285. ; whether the new sound is more
  5286. ; important than the ones already
  5287. ; playing. Thus an 'importance'
  5288. ; must be calculated, probably
  5289. ; using volume.
  5290.  
  5291. ; The output needs to be:
  5292.  
  5293. ; Write the pointers and volumes of
  5294. ; the sound channels
  5295.  
  5296.  
  5297.  tst.b notifplaying
  5298.  beq.s dontworry
  5299.  
  5300. ; find if we are already playing
  5301.  
  5302.  move.b IDNUM,d0
  5303.  move.w #7,d1
  5304.  lea CHANNELDATA,a3
  5305. findsameasme
  5306.  tst.b (a3)
  5307.  bne.s notavail
  5308.  cmp.b 1(a3),d0
  5309.  beq SameAsMe
  5310. notavail:
  5311.  add.w #4,a3
  5312.  dbra d1,findsameasme
  5313.  bra dontworry
  5314. SameAsMe
  5315.  rts
  5316.  
  5317. dontworry:
  5318.  
  5319. ; Ok its fine for us to play a sound.
  5320. ; So calculate left/right volume.
  5321.  
  5322.  move.w Noisex,d1
  5323.  muls d1,d1
  5324.  move.w Noisez,d2
  5325.  muls d2,d2
  5326.  move.w #64,d3
  5327.  moveq #1,d0
  5328.  add.l d1,d2
  5329.  beq pastcalc
  5330.  
  5331.  move.w #31,d0
  5332. .findhigh
  5333.  btst d0,d2
  5334.  bne .foundhigh
  5335.  dbra d0,.findhigh
  5336. .foundhigh
  5337.  asr.w #1,d0
  5338.  clr.l d3
  5339.  bset d0,d3
  5340.  move.l d3,d0
  5341.  
  5342.  move.w d0,d3
  5343.  muls d3,d3    ; x*x
  5344.  sub.l d2,d3    ; x*x-a
  5345.  asr.l #1,d3    ; (x*x-a)/2
  5346.  divs d0,d3    ; (x*x-a)/2x
  5347.  sub.w d3,d0    ; second approx
  5348.  bgt .stillnot0
  5349.  move.w #1,d0
  5350. .stillnot0
  5351.  
  5352.  move.w d0,d3
  5353.  muls d3,d3
  5354.  sub.l d2,d3
  5355.  asr.l #1,d3
  5356.  divs d0,d3
  5357.  sub.w d3,d0    ; second approx
  5358.  bgt .stillnot02
  5359.  move.w #1,d0
  5360. .stillnot02
  5361.  
  5362.  move.w #64,d3
  5363.  muls Noisevol,d3
  5364.  asr.w #1,d0
  5365.  addq #1,d0
  5366.  divs d0,d3
  5367.  
  5368.  cmp.w #64,d3
  5369.  ble.s notooloud
  5370.  move.w #64,d3
  5371. notooloud:
  5372.  
  5373. pastcalc:
  5374.  
  5375.     ; d3 contains volume of noise.
  5376.     
  5377.  move.w d3,d4
  5378.  
  5379.  move.w d3,d2
  5380.  muls Noisex,d2
  5381.  add.w d0,d0
  5382.  divs d0,d2
  5383.  
  5384.  bgt.s quietleft
  5385.  add.w d2,d4
  5386.  bge.s donequiet
  5387.  move.w #0,d4
  5388.  bra.s donequiet
  5389. quietleft:
  5390.  sub.w d2,d3
  5391.  bge.s donequiet
  5392.  move.w #0,d3
  5393. donequiet:
  5394.  
  5395. ; d3=leftvol?
  5396. ; d4=rightvol?
  5397.  
  5398.  clr.w needleft
  5399.  
  5400.  cmp.b d3,d4
  5401.  bgt.s RightLouder
  5402.  
  5403. ; Left is louder; is it MUCH louder?
  5404.  
  5405.  st needleft
  5406.  move.w d3,d2
  5407.  sub.w d4,d2
  5408.  cmp.w #32,d2
  5409.  slt needright
  5410.  bra aboutsame
  5411.  
  5412. RightLouder:
  5413.  st needright
  5414.  move.w d4,d2
  5415.  sub.w d3,d2
  5416.  cmp.w #32,d2
  5417.  slt needleft
  5418.  
  5419. aboutsame:
  5420.  
  5421.  tst.b STEREO
  5422.  beq NOSTEREO
  5423.  
  5424. ; Find least important sound on left
  5425.  
  5426.  move.l #0,a2
  5427.  move.l #0,d5
  5428.  move.w #10000,d2
  5429.  move.b IDNUM,d0
  5430.  lea LEFTCHANDATA,a3
  5431.  move.w #3,d1
  5432. FindLeftChannel
  5433.  tst.b (a3)
  5434.  bne.s .notactive
  5435.  cmp.b 1(a3),d0
  5436.  beq.s FOUNDLEFT
  5437.  cmp.w 2(a3),d2
  5438.  blt.s .notactive
  5439.  move.w 2(a3),d2
  5440.  move.l a3,a2
  5441.  move.w d5,d6
  5442.  
  5443. .notactive:
  5444.  add.w #4,a3
  5445.  add.w #1,d5
  5446.  dbra d1,FindLeftChannel
  5447.  move.l a2,a3
  5448.  bra.s gopastleft
  5449. FOUNDLEFT:
  5450.  move.w d5,d6
  5451. gopastleft:
  5452.  tst.l a3
  5453.  bne.s FOUNDALEFT
  5454.  rts
  5455. FOUNDALEFT:
  5456.  
  5457. ; d6 = channel number
  5458.  move.b d0,1(a3)
  5459.  move.w d3,2(a3)
  5460.  
  5461.  move.w Samplenum,d5
  5462.  move.l #SampleList,a3
  5463.  move.l (a3,d5.w*8),a1
  5464.  move.l 4(a3,d5.w*8),a2
  5465.  
  5466.  tst.b d6
  5467.  seq NoiseMade0LEFT
  5468.  beq.s .chan0
  5469.  cmp.b #2,d6
  5470.  slt NoiseMade1LEFT
  5471.  blt .chan1
  5472.  seq NoiseMade2LEFT
  5473.  beq .chan2
  5474.  st NoiseMade3LEFT
  5475.  
  5476.  move.b d5,LEFTPLAYEDTAB+9
  5477.  move.b d3,LEFTPLAYEDTAB+1+9
  5478.  move.b d4,LEFTPLAYEDTAB+2+9
  5479.  move.b d3,vol3left
  5480.  move.l a1,pos3LEFT
  5481.  move.l a2,Samp3endLEFT
  5482.  bra dorightchan
  5483.  
  5484. .chan0: 
  5485.  move.b d5,LEFTPLAYEDTAB
  5486.  move.b d3,LEFTPLAYEDTAB+1
  5487.  move.b d4,LEFTPLAYEDTAB+2
  5488.  move.l a1,pos0LEFT
  5489.  move.l a2,Samp0endLEFT
  5490.  move.b d3,vol0left
  5491.  bra dorightchan
  5492.  
  5493. .chan1:
  5494.  move.b d5,LEFTPLAYEDTAB+3
  5495.  move.b d3,LEFTPLAYEDTAB+1+3
  5496.  move.b d4,LEFTPLAYEDTAB+2+3
  5497.  move.b d3,vol1left
  5498.  move.l a1,pos1LEFT
  5499.  move.l a2,Samp1endLEFT
  5500.  bra dorightchan
  5501.  
  5502. .chan2: 
  5503.  move.b d5,LEFTPLAYEDTAB+6
  5504.  move.b d3,LEFTPLAYEDTAB+1+6
  5505.  move.b d4,LEFTPLAYEDTAB+2+6
  5506.  move.l a1,pos2LEFT
  5507.  move.l a2,Samp2endLEFT
  5508.  move.b d3,vol2left
  5509.  
  5510. dorightchan:
  5511.  
  5512. ; Find least important sound on right
  5513.  
  5514.  move.l #0,a2
  5515.  move.l #0,d5
  5516.  move.w #10000,d2
  5517.  move.b IDNUM,d0
  5518.  lea RIGHTCHANDATA,a3
  5519.  move.w #3,d1
  5520. FindRightChannel
  5521.  tst.b (a3)
  5522.  bne.s .notactive
  5523.  cmp.b 1(a3),d0
  5524.  beq.s FOUNDRIGHT
  5525.  cmp.w 2(a3),d2
  5526.  blt.s .notactive
  5527.  move.w 2(a3),d2
  5528.  move.l a3,a2
  5529.  move.w d5,d6
  5530.  
  5531. .notactive:
  5532.  add.w #4,a3
  5533.  add.w #1,d5
  5534.  dbra d1,FindRightChannel
  5535.  move.l a2,a3
  5536.  bra.s gopastright
  5537. FOUNDRIGHT:
  5538.  move.w d5,d6
  5539. gopastright:
  5540.  tst.l a3
  5541.  bne.s FOUNDARIGHT
  5542.  rts
  5543. FOUNDARIGHT:
  5544.  
  5545. ; d6 = channel number
  5546.  move.b d0,1(a3)
  5547.  move.w d3,2(a3)
  5548.  
  5549.  move.w Samplenum,d5
  5550.  move.l #SampleList,a3
  5551.  move.l (a3,d5.w*8),a1
  5552.  move.l 4(a3,d5.w*8),a2
  5553.  
  5554.  tst.b d6
  5555.  seq NoiseMade0RIGHT
  5556.  beq.s .chan0
  5557.  cmp.b #2,d6
  5558.  slt NoiseMade1RIGHT
  5559.  blt .chan1
  5560.  seq NoiseMade2RIGHT
  5561.  beq .chan2
  5562.  st NoiseMade3RIGHT
  5563.  
  5564.  move.b d5,RIGHTPLAYEDTAB+9
  5565.  move.b d3,RIGHTPLAYEDTAB+1+9
  5566.  move.b d4,RIGHTPLAYEDTAB+2+9
  5567.  move.b d4,vol3right
  5568.  move.l a1,pos3RIGHT
  5569.  move.l a2,Samp3endRIGHT
  5570.  rts
  5571.  
  5572. .chan0: 
  5573.  move.b d5,RIGHTPLAYEDTAB
  5574.  move.b d3,RIGHTPLAYEDTAB+1
  5575.  move.b d4,RIGHTPLAYEDTAB+2
  5576.  move.l a1,pos0RIGHT
  5577.  move.l a2,Samp0endRIGHT
  5578.  move.b d4,vol0right
  5579.  rts
  5580.  
  5581. .chan1:
  5582.  move.b d5,RIGHTPLAYEDTAB+3
  5583.  move.b d3,RIGHTPLAYEDTAB+1+3
  5584.  move.b d4,RIGHTPLAYEDTAB+2+3
  5585.  move.b d3,vol1right
  5586.  move.l a1,pos1RIGHT
  5587.  move.l a2,Samp1endRIGHT
  5588.  rts
  5589.  
  5590. .chan2: 
  5591.  move.b d5,RIGHTPLAYEDTAB+6
  5592.  move.b d3,RIGHTPLAYEDTAB+1+6
  5593.  move.b d4,RIGHTPLAYEDTAB+2+6
  5594.  move.l a1,pos2RIGHT
  5595.  move.l a2,Samp2endRIGHT
  5596.  move.b d3,vol2right
  5597.  rts
  5598.  
  5599. NOSTEREO:
  5600.  move.l #0,a2
  5601.  move.l #0,d5
  5602.  move.w #10000,d2
  5603.  move.b IDNUM,d0
  5604.  lea CHANNELDATA,a3
  5605.  move.w #7,d1
  5606. FindChannel
  5607.  tst.b (a3)
  5608.  bne.s .notactive
  5609.  cmp.b 1(a3),d0
  5610.  beq.s FOUNDCHAN
  5611.  cmp.w 2(a3),d2
  5612.  blt.s .notactive
  5613.  move.w 2(a3),d2
  5614.  move.l a3,a2
  5615.  move.w d5,d6
  5616.  
  5617. .notactive:
  5618.  add.w #4,a3
  5619.  add.w #1,d5
  5620.  dbra d1,FindChannel
  5621.  move.l a2,a3
  5622.  bra.s gopastchan
  5623. FOUNDCHAN:
  5624.  move.w d5,d6
  5625. gopastchan:
  5626.  tst.l a3
  5627.  bne.s FOUNDACHAN
  5628.  rts
  5629. FOUNDACHAN:
  5630.  
  5631. ; d6 = channel number
  5632.  move.b d0,1(a3)
  5633.  move.w d3,2(a3)
  5634.  
  5635.  move.w Samplenum,d5
  5636.  move.l #SampleList,a3
  5637.  move.l (a3,d5.w*8),a1
  5638.  move.l 4(a3,d5.w*8),a2
  5639.  
  5640.  tst.b d6
  5641.  seq NoiseMade0LEFT
  5642.  beq .chan0
  5643.  cmp.b #2,d6
  5644.  slt NoiseMade1LEFT
  5645.  blt .chan1
  5646.  seq NoiseMade2LEFT
  5647.  beq .chan2
  5648.  cmp.b #4,d6
  5649.  slt NoiseMade3LEFT
  5650.  blt .chan3
  5651.  seq NoiseMade0RIGHT
  5652.  beq .chan4
  5653.  cmp.b #6,d6
  5654.  slt NoiseMade1RIGHT
  5655.  blt .chan5
  5656.  seq NoiseMade2RIGHT
  5657.  beq .chan6
  5658.  st NoiseMade3RIGHT
  5659.  
  5660.  move.b d5,RIGHTPLAYEDTAB+9
  5661.  move.b d3,RIGHTPLAYEDTAB+1+9
  5662.  move.b d4,RIGHTPLAYEDTAB+2+9
  5663.  move.b d4,vol3right
  5664.  move.l a1,pos3RIGHT
  5665.  move.l a2,Samp3endRIGHT
  5666.  rts
  5667.  
  5668. .chan3:
  5669.  move.b d5,LEFTPLAYEDTAB+9
  5670.  move.b d3,LEFTPLAYEDTAB+1+9
  5671.  move.b d4,LEFTPLAYEDTAB+2+9
  5672.  move.b d3,vol3left
  5673.  move.l a1,pos3LEFT
  5674.  move.l a2,Samp3endLEFT
  5675.  bra dorightchan
  5676.  
  5677. .chan0: 
  5678.  move.b d5,LEFTPLAYEDTAB
  5679.  move.b d3,LEFTPLAYEDTAB+1
  5680.  move.b d4,LEFTPLAYEDTAB+2
  5681.  move.l a1,pos0LEFT
  5682.  move.l a2,Samp0endLEFT
  5683.  move.b d3,vol0left
  5684.  rts
  5685.  
  5686. .chan1:
  5687.  move.b d5,LEFTPLAYEDTAB+3
  5688.  move.b d3,LEFTPLAYEDTAB+1+3
  5689.  move.b d4,LEFTPLAYEDTAB+2+3
  5690.  move.b d3,vol1left
  5691.  move.l a1,pos1LEFT
  5692.  move.l a2,Samp1endLEFT
  5693.  rts
  5694.  
  5695. .chan2: 
  5696.  move.b d5,LEFTPLAYEDTAB+6
  5697.  move.b d3,LEFTPLAYEDTAB+1+6
  5698.  move.b d4,LEFTPLAYEDTAB+2+6
  5699.  move.l a1,pos2LEFT
  5700.  move.l a2,Samp2endLEFT
  5701.  move.b d3,vol2left
  5702.  rts
  5703.  
  5704. .chan4: 
  5705.  move.b d5,RIGHTPLAYEDTAB
  5706.  move.b d3,RIGHTPLAYEDTAB+1
  5707.  move.b d4,RIGHTPLAYEDTAB+2
  5708.  move.l a1,pos0RIGHT
  5709.  move.l a2,Samp0endRIGHT
  5710.  move.b d4,vol0right
  5711.  rts
  5712.  
  5713. .chan5:
  5714.  move.b d5,RIGHTPLAYEDTAB+3
  5715.  move.b d3,RIGHTPLAYEDTAB+1+3
  5716.  move.b d4,RIGHTPLAYEDTAB+2+3
  5717.  move.b d3,vol1right
  5718.  move.l a1,pos1RIGHT
  5719.  move.l a2,Samp1endRIGHT
  5720.  rts
  5721.  
  5722. .chan6: 
  5723.  move.b d5,RIGHTPLAYEDTAB+6
  5724.  move.b d3,RIGHTPLAYEDTAB+1+6
  5725.  move.b d4,RIGHTPLAYEDTAB+2+6
  5726.  move.l a1,pos2RIGHT
  5727.  move.l a2,Samp2endRIGHT
  5728.  move.b d3,vol2right
  5729.  rts
  5730.  
  5731. SampleList
  5732.  dc.l Scream,EndScream
  5733.  dc.l Shoot,EndShoot
  5734.  dc.l Munch,EndMunch
  5735.  dc.l PooGun,EndPooGun
  5736.  dc.l Collect,EndCollect
  5737. ;5
  5738.  dc.l DoorNoise,EndDoorNoise
  5739.  dc.l 0,0
  5740.  dc.l Stomp,EndStomp
  5741.  dc.l LowScream,EndLowScream
  5742.  dc.l BaddieGun,EndBaddieGun
  5743. ;10
  5744.  dc.l SwitchNoise,EndSwitch
  5745.  dc.l Reload,EndReload
  5746.  dc.l NoAmmo,EndNoAmmo
  5747.  
  5748. saveinters:  
  5749.  dc.w 0
  5750.  
  5751. z: dc.w 10
  5752.  
  5753. notifplaying:
  5754.  dc.w 0
  5755.  
  5756. audpos1: dc.w 0
  5757. audpos1b: dc.w 0
  5758. audpos2: dc.w 0
  5759. audpos2b: dc.w 0
  5760. audpos3: dc.w 0
  5761. audpos3b: dc.w 0
  5762. audpos4: dc.w 0
  5763. audpos4b: dc.w 0
  5764.  
  5765. vol0left: dc.w 0
  5766. vol0right: dc.w 0
  5767. vol1left: dc.w 0
  5768. vol1right: dc.w 0
  5769. vol2left: dc.w 0
  5770. vol2right: dc.w 0
  5771. vol3left: dc.w 0
  5772. vol3right: dc.w 0
  5773.  
  5774. pos: dc.l 0
  5775.  
  5776. pos0LEFT: dc.l empty
  5777. pos1LEFT: dc.l empty
  5778. pos2LEFT: dc.l empty
  5779. pos3LEFT: dc.l empty
  5780. pos0RIGHT: dc.l empty
  5781. pos1RIGHT: dc.l empty
  5782. pos2RIGHT: dc.l empty
  5783. pos3RIGHT: dc.l empty
  5784.  
  5785. numtodo dc.w 0
  5786.  
  5787. npt: dc.w 0
  5788.  
  5789. pretab:
  5790. val SET 0
  5791.  REPT 128
  5792.  dc.b val
  5793. val SET val+1
  5794.  ENDR
  5795. val SET -128
  5796.  REPT 128
  5797.  dc.b val
  5798. val SET val+1
  5799.  ENDR 
  5800.  
  5801. tab:
  5802.  ds.b 256*65
  5803.  
  5804.  
  5805. test: dc.l 0
  5806.  ds.l 30
  5807.  
  5808.  even
  5809. ConstCols:
  5810.  incbin "ConstCols"
  5811.  even
  5812. Smoothscalecols:
  5813. ; incbin "smoothbumppalscaled"
  5814.  even
  5815. SmoothTile:
  5816. ; incbin "smoothbumptile"
  5817.  even
  5818. Bumpscalecols:
  5819. ; incbin "Bumppalscaled"
  5820.  even
  5821. Bumptile:
  5822. ; incbin "bumptile"
  5823.  even
  5824. scalecols: incbin "bytepixpalscaled"
  5825.  even
  5826. floorscalecols: incbin "floorpalscaled"
  5827.  even
  5828. walltiles:
  5829.  incbin "bytepixfile"
  5830.  even
  5831. floortile:
  5832.  incbin "floortile" 
  5833.  even
  5834. wallrouts:
  5835. ; incbin "2x2WallDraw" 
  5836.  CNOP 0,64
  5837. BackPicture:
  5838.  incbin "backfile"
  5839. EndBackPicture:
  5840.  
  5841. drawpt: dc.l colbars2
  5842. olddrawpt: dc.l colbars
  5843. frompt: dc.l 0 
  5844.  
  5845. SineTable:
  5846.  incbin "bigsine"
  5847.  
  5848. angpos: dc.w 0
  5849. angspd: dc.w 0
  5850. flooryoff: dc.w 0
  5851. xoff: dc.l 0
  5852. yoff: dc.l 0
  5853. yvel: dc.l 0
  5854. zoff: dc.l 0
  5855. tyoff: dc.l 0
  5856. xspdval: dc.l 0
  5857. zspdval: dc.l 0
  5858. Zone: dc.w 0
  5859.  
  5860. PLR1: dc.b $ff
  5861.  even
  5862. PLR1_cosval: dc.w 0
  5863. PLR1_sinval: dc.w 0
  5864. PLR1_angpos: dc.w 0
  5865. PLR1_angspd: dc.w 0
  5866. PLR1_xoff: dc.l 0
  5867. PLR1_yoff: dc.l 0
  5868. PLR1_yvel: dc.l 0
  5869. PLR1_zoff: dc.l 0
  5870. PLR1_tyoff: dc.l 0
  5871. PLR1_xspdval: dc.l 0
  5872. PLR1_zspdval: dc.l 0
  5873. PLR1_Zone: dc.w 0
  5874. PLR1_Roompt: dc.l 0
  5875. PLR1_OldRoompt: dc.l 0
  5876. PLR1_PointsToRotatePtr: dc.l 0
  5877. PLR1_ListOfGraphRooms: dc.l 0
  5878. PLR1_oldxoff: dc.l 0
  5879. PLR1_oldzoff: dc.l 0
  5880.  
  5881.  ds.w 4
  5882.  
  5883. PLR1s_cosval: dc.w 0
  5884. PLR1s_sinval: dc.w 0
  5885. PLR1s_angpos: dc.w 0
  5886. PLR1s_angspd: dc.w 0
  5887. PLR1s_xoff: dc.l 0
  5888. PLR1s_yoff: dc.l 0
  5889. PLR1s_yvel: dc.l 0
  5890. PLR1s_zoff: dc.l 0
  5891. PLR1s_tyoff: dc.l 0
  5892. PLR1s_xspdval: dc.l 0
  5893. PLR1s_zspdval: dc.l 0
  5894. PLR1s_Zone: dc.w 0
  5895. PLR1s_Roompt: dc.l 0
  5896. PLR1s_OldRoompt: dc.l 0
  5897. PLR1s_PointsToRotatePtr: dc.l 0
  5898. PLR1s_ListOfGraphRooms: dc.l 0
  5899. PLR1s_oldxoff: dc.l 0
  5900. PLR1s_oldzoff: dc.l 0
  5901.  
  5902.  ds.w 4
  5903.  
  5904. PLR2: dc.b $0
  5905.  even
  5906. PLR2_cosval: dc.w 0
  5907. PLR2_sinval: dc.w 0
  5908. PLR2_angpos: dc.w 0
  5909. PLR2_angspd: dc.w 0
  5910. PLR2_xoff: dc.l 0
  5911. PLR2_yoff: dc.l 0
  5912. PLR2_yvel: dc.l 0
  5913. PLR2_zoff: dc.l 0
  5914. PLR2_tyoff: dc.l 0
  5915. PLR2_xspdval: dc.l 0
  5916. PLR2_zspdval: dc.l 0
  5917. PLR2_Zone: dc.w 0
  5918. PLR2_Roompt: dc.l 0
  5919. PLR2_OldRoompt: dc.l 0
  5920. PLR2_PointsToRotatePtr: dc.l 0
  5921. PLR2_ListOfGraphRooms: dc.l 0
  5922. PLR2_ForwardSpd: dc.w 0
  5923.  
  5924. liftanimtab:
  5925.  
  5926. endliftanimtab:
  5927.  
  5928. glassball:
  5929.  incbin "glassball.inc"
  5930. endglass
  5931. glassballpt: dc.l glassball
  5932.  
  5933. rndtab: ; incbin "randfile"
  5934. endrnd: 
  5935.  
  5936. brightanimtab:
  5937.  dcb.w 200,20
  5938.  dc.w 5
  5939.  dc.w 10,20
  5940.  dc.w 5
  5941.  dcb.w 30,20
  5942.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  5943.  dcb.w 40,0
  5944.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  5945.  dcb.w 300,0
  5946.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  5947.  dc.w -1
  5948.  
  5949. Roompt: dc.l 0
  5950. OldRoompt: dc.l 0
  5951.  
  5952. *****************************************************************
  5953.  *
  5954.  include "AB3:source/LevelData2"
  5955.  *
  5956. *****************************************************************
  5957.  
  5958.  
  5959. wallpt: dc.l 0
  5960. floorpt: dc.l 0
  5961.  
  5962. Rotated:
  5963.  ds.l 800 
  5964. ObjRotated:
  5965.  ds.l 800
  5966.  
  5967. OnScreen:
  5968.  ds.l 800 
  5969.  
  5970. startwait: dc.w 0
  5971. endwait: dc.w 0
  5972.  
  5973. Faces: incbin "faces2raw"
  5974.  
  5975. *******************************************************************
  5976.  
  5977. consttab:
  5978.  incbin "constantfile"
  5979.  
  5980. *******************************************************************
  5981.  
  5982. darkentab: incbin "darkenedcols"
  5983. brightentab: incbin "brightenfile"
  5984. WorkSpace:
  5985.  ds.l 8192 
  5986. waterfile: incbin "waterfile"
  5987.  
  5988.  SECTION ffff,CODE_C
  5989.  
  5990. nullspr: dc.l 0
  5991.  
  5992.  cnop 0,8
  5993. borders:
  5994.  incbin "leftbord"
  5995.  incbin "rightbord"
  5996.  
  5997. health: incbin "healthstrip"
  5998. Ammunition: incbin "ammostrip"
  5999. healthpal: incbin "healthpal"
  6000. PanelKeys: incbin "greenkey"
  6001.  incbin "redkey"
  6002.  incbin "yellowkey"
  6003.  incbin "bluekey"
  6004.  
  6005. null: ds.w 500
  6006. null2: ds.w 500
  6007. null3: ds.w 500
  6008. null4: ds.w 500
  6009.  
  6010.  
  6011. Blurbfield:
  6012.  
  6013.  dc.w bpl1ptl
  6014. bl1l: dc.w 0
  6015.  dc.w bpl1pth
  6016. bl1h: dc.w 0
  6017.  
  6018.  dc.w diwstart,$2c81
  6019.  dc.w diwstop,$1cc1
  6020.  dc.w ddfstart,$38
  6021.  dc.w ddfstop,$b8
  6022.  dc.w bplcon0,$9201
  6023.  dc.w bplcon1,0
  6024.  dc.w $106,$c40
  6025. blcols:
  6026.  dc.w col0,0
  6027.  dc.w col1,$fff
  6028.  
  6029.  dc.w $108,0
  6030.  dc.w $10a,0
  6031.  
  6032.  dc.w $ffff,$fffe
  6033.  dc.w $ffff,$fffe
  6034.  
  6035. nullline:
  6036.  ds.b 80
  6037.  
  6038. bigfield:    
  6039.                 ; Start of our copper list.
  6040.  
  6041.  dc.w dmacon,$8020
  6042.  dc.w intreq,$8011
  6043.  dc.w $1fc,$f
  6044.  dc.w diwstart
  6045. winstart: dc.w $2cb1
  6046.  dc.w diwstop
  6047. winstop: dc.w $2c91
  6048.  dc.w ddfstart
  6049. fetchstart: dc.w $48
  6050.  dc.w ddfstop
  6051. fetchstop: dc.w $88
  6052.  
  6053. bordercols:
  6054.  incbin "borderpal"
  6055.  
  6056.  dc.w spr0ptl
  6057. s0l:
  6058.  dc.w 0
  6059.  dc.w spr0pth
  6060. s0h:
  6061.  dc.w 0
  6062.  dc.w spr1ptl
  6063. s1l:
  6064.  dc.w 0
  6065.  dc.w spr1pth
  6066. s1h:
  6067.  dc.w 0
  6068.  dc.w spr2ptl
  6069. s2l:
  6070.  dc.w 0
  6071.  dc.w spr2pth
  6072. s2h:
  6073.  dc.w 0
  6074.  dc.w spr3ptl
  6075. s3l:
  6076.  dc.w 0
  6077.  dc.w spr3pth
  6078. s3h:
  6079.  dc.w 0
  6080.  dc.w spr4ptl
  6081. s4l:
  6082.  dc.w 0
  6083.  dc.w spr4pth
  6084. s4h:
  6085.  dc.w 0
  6086.  dc.w spr5ptl
  6087. s5l:
  6088.  dc.w 0
  6089.  dc.w spr5pth
  6090. s5h:
  6091.  dc.w 0
  6092.  dc.w spr6ptl
  6093. s6l:
  6094.  dc.w 0
  6095.  dc.w spr6pth
  6096. s6h:
  6097.  dc.w 0
  6098.  dc.w spr7ptl
  6099. s7l:
  6100.  dc.w 0
  6101.  dc.w spr7pth
  6102. s7h:
  6103.  dc.w 0
  6104.  
  6105.  dc.w $106,$8c42
  6106.  dc.w col0,$0
  6107.  dc.w $106,$c42
  6108.  dc.w col0,0
  6109.  
  6110.  dc.w $106,$c42
  6111.  incbin "borderpal"
  6112.  
  6113.  dc.w bplcon0,$7201
  6114.  dc.w bplcon1
  6115. smoff:
  6116.  dc.w $0
  6117.  
  6118.  dc.w $108
  6119. modulo: dc.w -24
  6120.  dc.w $10a,-24
  6121.  
  6122.  dc.w bpl1pth
  6123. pl1h
  6124.  dc.w 0
  6125.  
  6126.  dc.w bpl1ptl
  6127. pl1l
  6128.  dc.w 0
  6129.  
  6130.  dc.w bpl2pth
  6131. pl2h
  6132.  dc.w 0
  6133.  
  6134.  dc.w bpl2ptl
  6135. pl2l
  6136.  dc.w 0
  6137.  
  6138.  dc.w bpl3pth
  6139. pl3h
  6140.  dc.w 0
  6141.  
  6142.  dc.w bpl3ptl
  6143. pl3l
  6144.  dc.w 0
  6145.  
  6146.  dc.w bpl4pth
  6147. pl4h
  6148.  dc.w 0
  6149.  
  6150.  dc.w bpl4ptl
  6151. pl4l
  6152.  dc.w 0
  6153.  
  6154.  dc.w bpl5pth
  6155. pl5h
  6156.  dc.w 0
  6157.  
  6158.  dc.w bpl5ptl
  6159. pl5l
  6160.  dc.w 0
  6161.  
  6162.  dc.w bpl6pth
  6163. pl6h
  6164.  dc.w 0
  6165.  
  6166.  dc.w bpl6ptl
  6167. pl6l
  6168.  dc.w 0
  6169.  
  6170.  dc.w bpl7pth
  6171. pl7h
  6172.  dc.w 0
  6173.  
  6174.  dc.w bpl7ptl
  6175. pl7l
  6176.  dc.w 0
  6177.  
  6178.  
  6179.  dc.w $1001,$ff00
  6180.  dc.w intreq,$11
  6181. yposcop:
  6182.  dc.w $2a11,$fffe
  6183.  dc.w $8a,0
  6184.  
  6185.  ds.l 104*12
  6186.  
  6187. colbars:
  6188. val SET $2a
  6189.  dcb.l 104*80,$1fe0000
  6190.  dc.w $106,$c42
  6191.  
  6192.  dc.w $80
  6193. pch1:
  6194.  dc.w 0
  6195.  dc.w $82
  6196. pcl1:
  6197.  dc.w 0 
  6198.  dc.w $88,0
  6199.  
  6200.  dc.w $ffff,$fffe       ; End copper list.
  6201.  
  6202.  ds.l 104*12
  6203.  
  6204. colbars2:
  6205. val SET $2a
  6206.  dcb.l 104*80,$1fe0000
  6207.  
  6208.  dc.w $106,$c42
  6209.  
  6210.  dc.w $80
  6211. pch2:
  6212.  dc.w 0
  6213.  dc.w $82
  6214. pcl2:
  6215.  dc.w 0
  6216.  
  6217.  dc.w $88,0
  6218.  
  6219.  dc.w $ffff,$fffe       ; End copper list.
  6220.  
  6221.  ds.l 104*10
  6222.  
  6223. old: dc.l 0
  6224.  
  6225. prot5: dc.w 0
  6226. PanelCop:
  6227.  
  6228.  dc.w $10c,0
  6229.  dc.w bplcon0,$1201
  6230.  dc.w bpl1ptl
  6231. n1l:
  6232.  dc.w 0
  6233.  dc.w bpl1pth
  6234. n1h:
  6235.  dc.w 0
  6236.  dc.w $108,-24
  6237.  incbin "Panelpal"
  6238.  
  6239.  dc.w bpl2pth
  6240. p2h
  6241.  dc.w 0
  6242.  
  6243.  dc.w bpl2ptl
  6244. p2l
  6245.  dc.w 0
  6246.  
  6247.  dc.w bpl3pth
  6248. p3h
  6249.  dc.w 0
  6250.  
  6251.  dc.w bpl3ptl
  6252. p3l
  6253.  dc.w 0
  6254.  
  6255.  dc.w bpl4pth
  6256. p4h
  6257.  dc.w 0
  6258.  dc.w bpl4ptl
  6259. p4l
  6260.  dc.w 0
  6261.  dc.w bpl5pth
  6262. p5h
  6263.  dc.w 0
  6264.  dc.w bpl5ptl
  6265. p5l
  6266.  dc.w 0
  6267.  dc.w bpl6pth
  6268. p6h
  6269.  dc.w 0
  6270.  dc.w bpl6ptl
  6271. p6l
  6272.  dc.w 0
  6273.  dc.w bpl7pth
  6274. p7h
  6275.  dc.w 0
  6276.  dc.w bpl7ptl
  6277. p7l
  6278.  dc.w 0
  6279.  dc.w bpl8pth
  6280. p8h
  6281.  dc.w 0
  6282.  dc.w bpl8ptl
  6283. p8l
  6284.  dc.w 0
  6285.  
  6286.  dc.w $80
  6287. och:
  6288.  dc.w 0
  6289.  dc.w $82
  6290. ocl:
  6291.  dc.w 0
  6292.  
  6293.  dc.w ddfstart,$38
  6294.  dc.w ddfstop,$b8
  6295.  dc.w diwstart,$2c81
  6296.  dc.w diwstop,$2cc1
  6297.  
  6298.  dc.w bplcon0
  6299. Panelcon: dc.w $0211
  6300.  dc.w bpl1pth
  6301. p1h
  6302.  dc.w 0
  6303.  
  6304.  dc.w bpl1ptl
  6305. p1l
  6306.  dc.w 0
  6307.  
  6308.  
  6309.  dc.w $108,40*7
  6310.  dc.w $10a,40*7
  6311.  
  6312.  dc.w $ffff,$fffe
  6313.  
  6314.  dc.w $180,$fff
  6315.  
  6316.  
  6317.  dc.w $f801,$ff00
  6318.  dc.w col1,$50
  6319.  dc.w $f901,$ff00
  6320.  dc.w col1,$90
  6321.  dc.w $fa01,$ff00
  6322.  dc.w col1,$f0
  6323.  dc.w $fb01,$ff00
  6324.  dc.w col1,$f0
  6325.  dc.w $fc01,$ff00
  6326.  dc.w col1,$90
  6327.  dc.w $fd01,$ff00
  6328.  dc.w col1,$50
  6329.  
  6330.  dc.w $fe01,$ff00
  6331.  dc.w col1,$fff
  6332.  
  6333.  dc.w $ffdf,$fffe
  6334.  dc.w $a01,$ff00
  6335.  dc.w bplcon0,$201
  6336.  
  6337.  incbin "faces2cols"
  6338.  dc.w bpl1pth
  6339. f1h
  6340.  dc.w 0
  6341.  
  6342.  dc.w bpl1ptl
  6343. f1l
  6344.  dc.w 0
  6345.  
  6346.  dc.w bpl2pth
  6347. f2h
  6348.  dc.w 0
  6349.  
  6350.  dc.w bpl2ptl
  6351. f2l
  6352.  dc.w 0
  6353.  
  6354.  dc.w bpl3pth
  6355. f3h
  6356.  dc.w 0
  6357.  
  6358.  dc.w bpl3ptl
  6359. f3l
  6360.  dc.w 0
  6361.  
  6362.  dc.w bpl4pth
  6363. f4h
  6364.  dc.w 0
  6365.  dc.w bpl4ptl
  6366. f4l
  6367.  dc.w 0
  6368.  
  6369.  dc.w bpl5pth
  6370. f5h
  6371.  dc.w 0
  6372.  dc.w bpl5ptl
  6373. f5l
  6374.  dc.w 0
  6375.  
  6376.  dc.w $0c01,$ff00
  6377.  dc.w bplcon0,$5201
  6378.   
  6379.  dc.w $ffff,$fffe
  6380.  
  6381.  cnop 0,64
  6382. FacePlace:
  6383.  ds.l 6*32*5
  6384.  
  6385.  
  6386.  
  6387. ********************************************
  6388. * Stuff you don't have to worry about yet. *
  6389. ********************************************
  6390.  
  6391. closeeverything:
  6392.  
  6393.  jsr mt_end
  6394.  
  6395.  move.l #$dff000,a6
  6396.  move.l old,$dff080     ; Restore old copper list.
  6397.  move.l old,d0
  6398.  move.w d0,ocl
  6399.  swap d0
  6400.  move.w d0,och
  6401.  move.w #$8020,dmacon(a6)
  6402.  move.w #$f,dmacon(a6)
  6403.  move.l saveit,$6c.w
  6404.  move.l OLDKINT,$68.w
  6405.  move.w saveinters,d0
  6406.  or.w #$c000,d0
  6407.  move.w d0,intena(a6)
  6408.  clr.w $dff0a8
  6409.  clr.w $dff0b8
  6410.  clr.w $dff0c8
  6411.  clr.w $dff0d8
  6412.  
  6413. ; move.w #3,d0
  6414. ;nonewvbl
  6415. ; btst #5,intreqrl(a6)
  6416. ; beq.s nonewvbl
  6417. ; move.w #$20,intreq(a6)
  6418. ; dbra d0,nonewvbl
  6419.  
  6420. ; move.l oldview,a1
  6421. ; move.l a1,d0
  6422. ; move.l gfxbase,a6
  6423. ; jsr -$de(a6)
  6424.  
  6425.  move.l gfxbase,d0
  6426.  move.l d0,a1
  6427.  move.l 4.w,a6
  6428.  jsr CloseLib(a6)
  6429.  
  6430.  cmp.b #'t',option+1
  6431.  bra.s leaveold
  6432.  move.w #$f8e,$dff1dc
  6433. leaveold:
  6434.  
  6435.  rte
  6436.  
  6437. gfxbase: dc.l 0
  6438. oldview: dc.l 0
  6439.  
  6440. stuff:
  6441.  
  6442.     Lea    gfxname(pc),a1    
  6443.     Moveq.l    #0,d0
  6444.     Move.l    $4.w,a6    
  6445.     Jsr    -$228(a6)
  6446.     Move.l     d0,gfxbase
  6447.     Move.l    d0,a6                Use As Base Reg
  6448.     Move.l    34(a6),oldview
  6449.     move.l 38(a6),old
  6450.  
  6451.  jmp endstuff
  6452.  
  6453. gfxname dc.b "graphics.library",0
  6454.  
  6455.  even
  6456.  
  6457.  
  6458.  cnop 0,64
  6459.  
  6460. Panel:
  6461.  incbin "PanelRaw"
  6462.  
  6463. TimerScr: ds.b 40*64
  6464.  
  6465. scrntab:
  6466.  ds.b 16
  6467. val SET 32
  6468.  REPT 96
  6469.  dc.b val,val,val
  6470. val SET val+1
  6471.  ENDR
  6472.  ds.b 16
  6473.  
  6474.  cnop 0,64
  6475. scrn:
  6476.  
  6477.  dcb.l 8,$33333333
  6478.  dc.l 0
  6479.  dc.l 0
  6480.  
  6481.  dcb.l 8,$0f0f0f0f
  6482.  dc.l 0
  6483.  dc.l 0
  6484.  
  6485.  dcb.l 8,$00ff00ff
  6486.  dc.l 0
  6487.  dc.l 0
  6488.  
  6489.  dcb.l 8,$0000ffff
  6490.  dc.l 0
  6491.  dc.l 0
  6492.  
  6493.  dc.l 0,-1,0,-1,0,-1,0,-1
  6494.  dc.l 0
  6495.  dc.l 0
  6496.  
  6497.  dc.l -1,-1,0,0,-1,-1,0,0
  6498.  dc.l 0
  6499.  dc.l 0
  6500.  
  6501.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  6502.  dc.l 0
  6503.  dc.l 0
  6504.  
  6505. NumTimes: dc.l 0
  6506. TimeCount: dc.l 0
  6507. oldtime: dc.l 0
  6508. counting: dc.b 0
  6509. oktodisplay: dc.b 0
  6510.  
  6511. INITTIMER:
  6512.  move.l #0,TimeCount
  6513.  move.l #0,NumTimes
  6514.  rts
  6515.  
  6516. STARTCOUNT:
  6517.  move.l d0,-(a7)
  6518.  move.l $dff004,d0
  6519.  and.l #$1ffff,d0
  6520.  move.l d0,oldtime
  6521.  st counting
  6522.  move.l (a7)+,d0
  6523.  rts
  6524.  
  6525. STOPCOUNT:
  6526.  move.l d0,-(a7)
  6527.  move.l $dff004,d0
  6528.  and.l #$1ffff,d0
  6529.  
  6530.  sub.l oldtime,d0
  6531.  cmp.l #-256,d0
  6532.  bge.s okcount
  6533.  add.l #313*256,d0
  6534. okcount:
  6535.  add.l d0,TimeCount
  6536.  addq.l #1,NumTimes
  6537.  clr.b counting
  6538.  move.l (a7)+,d0
  6539.  rts
  6540.  
  6541. STOPCOUNTNOADD:
  6542.  move.l d0,-(a7)
  6543.  move.l $dff004,d0
  6544.  and.l #$1ffff,d0
  6545.  
  6546.  sub.l oldtime,d0
  6547.  cmp.l #-256,d0
  6548.  bge.s okcount2
  6549.  add.l #313*256,d0
  6550. okcount2:
  6551.  add.l d0,TimeCount
  6552.  clr.b counting
  6553.  move.l (a7)+,d0
  6554.  rts
  6555.  
  6556. maxbot: dc.w 0
  6557. tstneg: dc.l 0
  6558.  
  6559. STOPTIMER:
  6560.  st oktodisplay
  6561.  rts
  6562.  
  6563. digits: incbin "numbers.inc"
  6564.  
  6565.  
  6566.  Section Sounds,CODE_C
  6567.  
  6568. Scream: incbin "ab3:sounds/Scream"
  6569.  ds.w 100
  6570. EndScream:
  6571. LowScream: incbin "ab3:sounds/LowScream"
  6572.  ds.w 100
  6573. EndLowScream:
  6574. BaddieGun: incbin "ab3:sounds/BaddieGun"
  6575. EndBaddieGun:
  6576. ;bass: incbin "ab3:sounds/backbass+drum"
  6577. ;bassend:
  6578. Shoot: incbin "ab3:sounds/fire!"
  6579. EndShoot:
  6580. Munch: incbin "ab3:sounds/munch"
  6581. EndMunch:
  6582. PooGun: incbin "ab3:sounds/shoot.dm"
  6583. EndPooGun:
  6584. Collect: incbin "ab3:sounds/collect"
  6585. EndCollect:
  6586. DoorNoise: incbin "ab3:sounds/newdoor"
  6587. EndDoorNoise:
  6588. Stomp: incbin "ab3:sounds/footstep3"
  6589. EndStomp:
  6590. SwitchNoise: incbin "ab3:sounds/switch"
  6591. EndSwitch:
  6592. Reload: incbin "ab3:sounds/switch1.SFX"
  6593. EndReload:
  6594. NoAmmo: incbin "ab3:sounds/noammo"
  6595. EndNoAmmo:
  6596.  
  6597.  SECTION music,code_c
  6598.  
  6599. UseAllChannels: dc.w 0
  6600.  
  6601. mt_init:move.l    mt_data,a0
  6602.     move.l    a0,a1
  6603.     add.l    #$3b8,a1
  6604.     moveq    #$7f,d0
  6605.     moveq    #0,d1
  6606. mt_loop:move.l    d1,d2
  6607.     subq.w    #1,d0
  6608. mt_lop2:move.b    (a1)+,d1
  6609.     cmp.b    d2,d1
  6610.     bgt.s    mt_loop
  6611.     dbf    d0,mt_lop2
  6612.     addq.b    #1,d2
  6613.  
  6614.     lea    mt_samplestarts(pc),a1
  6615.     asl.l    #8,d2
  6616.     asl.l    #2,d2
  6617.     add.l    #$43c,d2
  6618.     add.l    a0,d2
  6619.     move.l    d2,a2
  6620.     moveq    #$1e,d0
  6621. mt_lop3:clr.l    (a2)
  6622.     move.l    a2,(a1)+
  6623.     moveq    #0,d1
  6624.     move.w    42(a0),d1
  6625.     asl.l    #1,d1
  6626.     add.l    d1,a2
  6627.     add.l    #$1e,a0
  6628.     dbf    d0,mt_lop3
  6629.  
  6630.     or.b    #$2,$bfe001
  6631.     move.b    #$6,mt_speed
  6632.     clr.w    $dff0a8
  6633.     clr.w    $dff0b8
  6634.     clr.w    $dff0c8
  6635.     clr.w    $dff0d8
  6636.     clr.b    mt_songpos
  6637.     clr.b    mt_counter
  6638.     clr.w    mt_pattpos
  6639.     rts
  6640.  
  6641. mt_end:    clr.w    $dff0a8
  6642.     clr.w    $dff0b8
  6643.     clr.w    $dff0c8
  6644.     clr.w    $dff0d8
  6645.     move.w    #$f,$dff096
  6646.     rts
  6647.  
  6648. mt_music:
  6649.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  6650.     move.l    mt_data,a0
  6651.     addq.b    #$1,mt_counter
  6652.     move.b    mt_counter,D0
  6653.     cmp.b    mt_speed,D0
  6654.     blt.s    mt_nonew
  6655.     clr.b    mt_counter
  6656.     bra    mt_getnew
  6657.  
  6658. mt_nonew:
  6659.     lea    mt_voice1(pc),a6
  6660.     lea    $dff0a0,a5
  6661.     bsr    mt_checkcom
  6662.     lea    mt_voice2(pc),a6
  6663.     lea    $dff0b0,a5
  6664.     bsr    mt_checkcom
  6665.     tst.b UseAllChannels
  6666.     beq mt_endr
  6667.      lea    mt_voice3(pc),a6
  6668.     lea    $dff0c0,a5
  6669.     bsr    mt_checkcom
  6670.     lea    mt_voice4(pc),a6
  6671.     lea    $dff0d0,a5
  6672.     bsr    mt_checkcom
  6673.     bra    mt_endr
  6674.  
  6675. mt_arpeggio:
  6676.     moveq    #0,d0
  6677.     move.b    mt_counter,d0
  6678.     divs    #$3,d0
  6679.     swap    d0
  6680.     cmp.w    #$0,d0
  6681.     beq.s    mt_arp2
  6682.     cmp.w    #$2,d0
  6683.     beq.s    mt_arp1
  6684.  
  6685.     moveq    #0,d0
  6686.     move.b    $3(a6),d0
  6687.     lsr.b    #4,d0
  6688.     bra.s    mt_arp3
  6689. mt_arp1:moveq    #0,d0
  6690.     move.b    $3(a6),d0
  6691.     and.b    #$f,d0
  6692.     bra.s    mt_arp3
  6693. mt_arp2:move.w    $10(a6),d2
  6694.     bra.s    mt_arp4
  6695. mt_arp3:asl.w    #1,d0
  6696.     moveq    #0,d1
  6697.     move.w    $10(a6),d1
  6698.     lea    mt_periods(pc),a0
  6699.     moveq    #$24,d7
  6700. mt_arploop:
  6701.     move.w    (a0,d0.w),d2
  6702.     cmp.w    (a0),d1
  6703.     bge.s    mt_arp4
  6704.     addq.l    #2,a0
  6705.     dbf    d7,mt_arploop
  6706.     rts
  6707. mt_arp4:move.w    d2,$6(a5)
  6708.     rts
  6709.  
  6710. mt_getnew:
  6711.     move.l    mt_data,a0
  6712.     move.l    a0,a3
  6713.     move.l    a0,a2
  6714.     add.l    #$c,a3
  6715.     add.l    #$3b8,a2
  6716.     add.l    #$43c,a0
  6717.  
  6718.     moveq    #0,d0
  6719.     move.l    d0,d1
  6720.     move.b    mt_songpos,d0
  6721.     move.b    (a2,d0.w),d1
  6722.     asl.l    #8,d1
  6723.     asl.l    #2,d1
  6724.     add.w    mt_pattpos,d1
  6725.     clr.w    mt_dmacon
  6726.  
  6727.     lea    $dff0a0,a5
  6728.     lea    mt_voice1(pc),a6
  6729.     bsr.s    mt_playvoice
  6730.     lea    $dff0b0,a5
  6731.     lea    mt_voice2(pc),a6
  6732.     bsr.s    mt_playvoice
  6733.     tst.b UseAllChannels
  6734.     beq mt_setdma
  6735.     lea    $dff0c0,a5
  6736.     lea    mt_voice3(pc),a6
  6737.     bsr.s    mt_playvoice
  6738.     lea    $dff0d0,a5
  6739.     lea    mt_voice4(pc),a6
  6740.     bsr.s    mt_playvoice
  6741.     bra    mt_setdma
  6742.  
  6743. mt_playvoice:
  6744.     move.l    (a0,d1.l),(a6)
  6745.     addq.l    #4,d1
  6746.     moveq    #0,d2
  6747.     move.b    $2(a6),d2
  6748.     and.b    #$f0,d2
  6749.     lsr.b    #4,d2
  6750.     move.b    (a6),d0
  6751.     and.b    #$f0,d0
  6752.     or.b    d0,d2
  6753.     tst.b    d2
  6754.     beq.s    mt_setregs
  6755.     moveq    #0,d3
  6756.     lea    mt_samplestarts(pc),a1
  6757.     move.l    d2,d4
  6758.     subq.l    #$1,d2
  6759.     asl.l    #2,d2
  6760.     mulu    #$1e,d4
  6761.     move.l    (a1,d2.l),$4(a6)
  6762.     move.w    (a3,d4.l),$8(a6)
  6763.     move.w    $2(a3,d4.l),$12(a6)
  6764.     move.w    $4(a3,d4.l),d3
  6765.     tst.w    d3
  6766.     beq.s    mt_noloop
  6767.     move.l    $4(a6),d2
  6768.     asl.w    #1,d3
  6769.     add.l    d3,d2
  6770.     move.l    d2,$a(a6)
  6771.     move.w    $4(a3,d4.l),d0
  6772.     add.w    $6(a3,d4.l),d0
  6773.     move.w    d0,8(a6)
  6774.     move.w    $6(a3,d4.l),$e(a6)
  6775.     move.w    $12(a6),d0
  6776.     asr.w #2,d0
  6777.     move.w d0,$8(a5)
  6778.     bra.s    mt_setregs
  6779. mt_noloop:
  6780.     move.l    $4(a6),d2
  6781.     add.l    d3,d2
  6782.     move.l    d2,$a(a6)
  6783.     move.w    $6(a3,d4.l),$e(a6)
  6784.     move.w    $12(a6),d0
  6785.     asr.w #2,d0
  6786.     move.w d0,$8(a5)
  6787. mt_setregs:
  6788.     move.w    (a6),d0
  6789.     and.w    #$fff,d0
  6790.     beq    mt_checkcom2
  6791.     move.b    $2(a6),d0
  6792.     and.b    #$F,d0
  6793.     cmp.b    #$3,d0
  6794.     bne.s    mt_setperiod
  6795.     bsr    mt_setmyport
  6796.     bra    mt_checkcom2
  6797. mt_setperiod:
  6798.     move.w    (a6),$10(a6)
  6799.     and.w    #$fff,$10(a6)
  6800.     move.w    $14(a6),d0
  6801.     move.w    d0,$dff096
  6802.     clr.b    $1b(a6)
  6803.  
  6804.     move.l    $4(a6),(a5)
  6805.     move.w    $8(a6),$4(a5)
  6806.     move.w    $10(a6),d0
  6807.     and.w    #$fff,d0
  6808.     move.w    d0,$6(a5)
  6809.     move.w    $14(a6),d0
  6810.     or.w    d0,mt_dmacon
  6811.     bra    mt_checkcom2
  6812.  
  6813. mt_setdma:
  6814.      move.w #250,d0
  6815. mt_wait:
  6816.      add.w #1,testchip
  6817.      dbra d0,mt_wait
  6818.     move.w    mt_dmacon,d0
  6819.     or.w    #$8000,d0
  6820.     and.w #%1111111111110011,d0
  6821.     move.w    d0,$dff096
  6822.     move.w #250,d0
  6823. mt_wait2:
  6824.     add.w #1,testchip
  6825.     dbra    d0,mt_wait2
  6826.     lea    $dff000,a5
  6827.     tst.b UseAllChannels
  6828.     beq.s noall
  6829.     lea    mt_voice4(pc),a6
  6830.     move.l    $a(a6),$d0(a5)
  6831.     move.w    $e(a6),$d4(a5)
  6832.     lea    mt_voice3(pc),a6
  6833.     move.l    $a(a6),$c0(a5)
  6834.     move.w    $e(a6),$c4(a5)
  6835. noall:
  6836.     lea    mt_voice2(pc),a6
  6837.     move.l    $a(a6),$b0(a5)
  6838.     move.w    $e(a6),$b4(a5)
  6839.     lea    mt_voice1(pc),a6
  6840.     move.l    $a(a6),$a0(a5)
  6841.     move.w    $e(a6),$a4(a5)
  6842.  
  6843.     add.w    #$10,mt_pattpos
  6844.     cmp.w    #$400,mt_pattpos
  6845.     bne.s    mt_endr
  6846. mt_nex:    clr.w    mt_pattpos
  6847.     clr.b    mt_break
  6848.     addq.b    #1,mt_songpos
  6849.     and.b    #$7f,mt_songpos
  6850.     move.b    mt_songpos,d1
  6851. ;    cmp.b    mt_data+$3b6,d1
  6852. ;    bne.s    mt_endr
  6853. ;    move.b    mt_data+$3b7,mt_songpos
  6854. mt_endr:tst.b    mt_break
  6855.     bne.s    mt_nex
  6856.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  6857.     rts
  6858.  
  6859. mt_setmyport:
  6860.     move.w    (a6),d2
  6861.     and.w    #$fff,d2
  6862.     move.w    d2,$18(a6)
  6863.     move.w    $10(a6),d0
  6864.     clr.b    $16(a6)
  6865.     cmp.w    d0,d2
  6866.     beq.s    mt_clrport
  6867.     bge.s    mt_rt
  6868.     move.b    #$1,$16(a6)
  6869.     rts
  6870. mt_clrport:
  6871.     clr.w    $18(a6)
  6872. mt_rt:    rts
  6873.  
  6874. CODESTORE: dc.l 0
  6875.  
  6876. mt_myport:
  6877.     move.b    $3(a6),d0
  6878.     beq.s    mt_myslide
  6879.     move.b    d0,$17(a6)
  6880.     clr.b    $3(a6)
  6881. mt_myslide:
  6882.     tst.w    $18(a6)
  6883.     beq.s    mt_rt
  6884.     moveq    #0,d0
  6885.     move.b    $17(a6),d0
  6886.     tst.b    $16(a6)
  6887.     bne.s    mt_mysub
  6888.     add.w    d0,$10(a6)
  6889.     move.w    $18(a6),d0
  6890.     cmp.w    $10(a6),d0
  6891.     bgt.s    mt_myok
  6892.     move.w    $18(a6),$10(a6)
  6893.     clr.w    $18(a6)
  6894. mt_myok:move.w    $10(a6),$6(a5)
  6895.     rts
  6896. mt_mysub:
  6897.     sub.w    d0,$10(a6)
  6898.     move.w    $18(a6),d0
  6899.     cmp.w    $10(a6),d0
  6900.     blt.s    mt_myok
  6901.     move.w    $18(a6),$10(a6)
  6902.     clr.w    $18(a6)
  6903.     move.w    $10(a6),$6(a5)
  6904.     rts
  6905.  
  6906. mt_vib:    move.b    $3(a6),d0
  6907.     beq.s    mt_vi
  6908.     move.b    d0,$1a(a6)
  6909.  
  6910. mt_vi:    move.b    $1b(a6),d0
  6911.     lea    mt_sin(pc),a4
  6912.     lsr.w    #$2,d0
  6913.     and.w    #$1f,d0
  6914.     moveq    #0,d2
  6915.     move.b    (a4,d0.w),d2
  6916.     move.b    $1a(a6),d0
  6917.     and.w    #$f,d0
  6918.     mulu    d0,d2
  6919.     lsr.w    #$6,d2
  6920.     move.w    $10(a6),d0
  6921.     tst.b    $1b(a6)
  6922.     bmi.s    mt_vibmin
  6923.     add.w    d2,d0
  6924.     bra.s    mt_vib2
  6925. mt_vibmin:
  6926.     sub.w    d2,d0
  6927. mt_vib2:move.w    d0,$6(a5)
  6928.     move.b    $1a(a6),d0
  6929.     lsr.w    #$2,d0
  6930.     and.w    #$3c,d0
  6931.     add.b    d0,$1b(a6)
  6932.     rts
  6933.  
  6934. mt_nop:    move.w    $10(a6),$6(a5)
  6935.     rts
  6936.  
  6937.  
  6938. mt_checkcom:
  6939.     move.w    $2(a6),d0
  6940.     and.w    #$fff,d0
  6941.     beq.s    mt_nop
  6942.     move.b    $2(a6),d0
  6943.     and.b    #$f,d0
  6944.     tst.b    d0
  6945.     beq    mt_arpeggio
  6946.     cmp.b    #$1,d0
  6947.     beq.s    mt_portup
  6948.     cmp.b    #$2,d0
  6949.     beq    mt_portdown
  6950.     cmp.b    #$3,d0
  6951.     beq    mt_myport
  6952.     cmp.b    #$4,d0
  6953.     beq    mt_vib
  6954.     move.w    $10(a6),$6(a5)
  6955.     cmp.b    #$a,d0
  6956.     beq.s    mt_volslide
  6957.     rts
  6958.  
  6959. mt_volslide:
  6960.     moveq    #0,d0
  6961.     move.b    $3(a6),d0
  6962.     lsr.b    #4,d0
  6963.     tst.b    d0
  6964.     beq.s    mt_voldown
  6965.     add.w    d0,$12(a6)
  6966.     cmp.w    #$40,$12(a6)
  6967.     bmi.s    mt_vol2
  6968.     move.w    #$40,$12(a6)
  6969. mt_vol2:move.w    $12(a6),d0
  6970.     asr.w #2,d0
  6971.     move.w d0,$8(a5)
  6972.     rts
  6973.  
  6974. mt_voldown:
  6975.     moveq    #0,d0
  6976.     move.b    $3(a6),d0
  6977.     and.b    #$f,d0
  6978.     sub.w    d0,$12(a6)
  6979.     bpl.s    mt_vol3
  6980.     clr.w    $12(a6)
  6981. mt_vol3:move.w    $12(a6),d0
  6982.     asr.w #2,d0
  6983.     move.w d0,$8(a5)
  6984.     rts
  6985.  
  6986. mt_portup:
  6987.     moveq    #0,d0
  6988.     move.b    $3(a6),d0
  6989.     sub.w    d0,$10(a6)
  6990.     move.w    $10(a6),d0
  6991.     and.w    #$fff,d0
  6992.     cmp.w    #$71,d0
  6993.     bpl.s    mt_por2
  6994.     and.w    #$f000,$10(a6)
  6995.     or.w    #$71,$10(a6)
  6996. mt_por2:move.w    $10(a6),d0
  6997.     and.w    #$fff,d0
  6998.     move.w    d0,$6(a5)
  6999.     rts
  7000.  
  7001. mt_portdown:
  7002.     clr.w    d0
  7003.     move.b    $3(a6),d0
  7004.     add.w    d0,$10(a6)
  7005.     move.w    $10(a6),d0
  7006.     and.w    #$fff,d0
  7007.     cmp.w    #$358,d0
  7008.     bmi.s    mt_por3
  7009.     and.w    #$f000,$10(a6)
  7010.     or.w    #$358,$10(a6)
  7011. mt_por3:move.w    $10(a6),d0
  7012.     and.w    #$fff,d0
  7013.     move.w    d0,$6(a5)
  7014.     rts
  7015.  
  7016. mt_checkcom2:
  7017.     move.b    $2(a6),d0
  7018.     and.b    #$f,d0
  7019.     cmp.b    #$e,d0
  7020.     beq.s    mt_setfilt
  7021.     cmp.b    #$d,d0
  7022.     beq.s    mt_pattbreak
  7023.     cmp.b    #$b,d0
  7024.     beq.s    mt_posjmp
  7025.     cmp.b    #$c,d0
  7026.     beq.s    mt_setvol
  7027.     cmp.b    #$f,d0
  7028.     beq.s    mt_setspeed
  7029.     rts
  7030.  
  7031. mt_setfilt:
  7032.     move.b    $3(a6),d0
  7033.     and.b    #$1,d0
  7034.     asl.b    #$1,d0
  7035.     and.b    #$fd,$bfe001
  7036.     or.b    d0,$bfe001
  7037.     rts
  7038. mt_pattbreak:
  7039.     not.b    mt_break
  7040.     rts
  7041. mt_posjmp:
  7042.     st reachedend
  7043.     move.b    $3(a6),d0
  7044.     subq.b    #$1,d0
  7045.     move.b    d0,mt_songpos
  7046.     not.b    mt_break
  7047.     rts
  7048. mt_setvol:
  7049.     cmp.b    #$40,$3(a6)
  7050.     ble.s    mt_vol4
  7051.     move.b    #$40,$3(a6)
  7052. mt_vol4:move.b    $3(a6),d0
  7053.     asr.w #2,d0
  7054.     move.w d0,$8(a5)
  7055.     rts
  7056. mt_setspeed:
  7057.     cmp.b    #$1f,$3(a6)
  7058.     ble.s    mt_sets
  7059.     move.b    #$1f,$3(a6)
  7060. mt_sets:move.b    $3(a6),d0
  7061.     beq.s    mt_rts2
  7062.     move.b    d0,mt_speed
  7063.     clr.b    mt_counter
  7064. mt_rts2:rts
  7065.  
  7066. mt_sin:
  7067.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  7068.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  7069.  
  7070. mt_periods:
  7071.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  7072.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  7073.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  7074.  DC.w $007f,$0078,$0071,$0000,$0000
  7075.  
  7076. reachedend: dc.b 0
  7077. mt_speed:    DC.b    6
  7078. mt_songpos:    DC.b    0
  7079. mt_pattpos:    DC.w    0
  7080. mt_counter:    DC.b    0
  7081.  
  7082. mt_break:    DC.b    0
  7083. mt_dmacon:    DC.w    0
  7084. mt_samplestarts:DS.L    $1f
  7085. mt_voice1:    DS.w    10
  7086.         DC.w    1
  7087.         DS.w    3
  7088. mt_voice2:    DS.w    10
  7089.         DC.w    2
  7090.         DS.w    3
  7091. mt_voice3:    DS.w    10
  7092.         DC.w    4
  7093.         DS.w    3
  7094. mt_voice4:    DS.w    10
  7095.         DC.w    8
  7096.         DS.w    3
  7097.  
  7098. testchip: dc.w 0
  7099.  
  7100. ;/* End of File */
  7101. mt_data: dc.l 0
  7102.  
  7103. ingame: incbin "ab3:includes/ingame"
  7104. gameover: incbin "ab3:includes/gameover"
  7105. welldone: incbin "ab3:includes/welldone"
  7106.